2016-12-15 47 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)將產生1list3

我想表達一個列表理解後續代碼:

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

我可以通過這個list解析得到的結果相同:

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]