2016-12-15 4 views
1

Я столкнулся с вопросом: кто-то хотел создать list3 = [1, 0, 1, 0, 0] для list1 = [0, 1, 0, 0, 1] и list2 = [0, 1, 0, 1, 1].Альтернативное понимание списка

Если бы zip(list1, list2), то только zip(0, 0) будет генерировать 1 для list3.

Я хочу выразить последующий код списка понимание:

L3 = [] 
for x in zip(L1, L2): 
    if sum(x) == 0: 
     L3.append(1) 
    else: 
     L3.append(0) 
print L3 

я могу получить тот же результат, используя этот список понимание:

print [int(sum(x)==0) for x in zip(L1, L2)] 

Я хотел бы знать, если есть способ более точно выразить условие if/else исходного блока кода в понимании списка. Я могу понять, что этот вопрос можно считать излишним, поскольку условие if/else, естественно, состоит, но опубликованные альтернативы могут быть очень полезны для меня.

ответ

5

Вы можете использовать условное выражение:

print [1 if sum(x) == 0 else 0 for x in zip(list1, list2)] 

Здесь 1 if sum(x) == 0 else 0 непосредственно выражающее условие.

Для получения дополнительной информации см Does Python have a ternary conditional operator?

Другой альтернативой является фактор из логики в функцию, и вызвать функцию из списка понимания. Это позволило бы логике использовать любые инструкции управления потоком (условные операторы, циклы и т. Д.).

1
L1,L2 = [0, 1, 0, 0, 1], [0, 1, 0, 1, 1] 
# map and lambda 
L3 = map(lambda x: 1 if not sum(x) else 0, zip(L1, L2)) 
print L3 
# [1, 0, 1, 0, 0] 
Смежные вопросы