我遇到了一个问题,有人想为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条件自然是包含在内的,但是发布的替代方案对我来说非常有用。
答案 0 :(得分: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 :(得分: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]