替代列表理解

pet*_*ruz 1 python list-comprehension

我碰到的一个问题是有人想生成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 
Run Code Online (Sandbox Code Playgroud)

我可以通过使用此列表理解获得相同的输出:

print [int(sum(x)==0) for x in zip(L1, L2)]
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以更简单地表达列表理解中的初始代码块的if/else条件.我可以理解这个问题可能被认为是多余的,因为if/else条件自然是包含的,但是发布的替代方案对我来说非常有用.

NPE*_*NPE 5

您可以使用条件表达式:

print [1 if sum(x) == 0 else 0 for x in zip(list1, list2)]
Run Code Online (Sandbox Code Playgroud)

在这里,1 if sum(x) == 0 else 0直接表达条件.

有关更多信息,请参阅Python是否具有三元条件运算符?

另一种方法是将逻辑分解为函数,并从列表推导中调用函数.这将允许逻辑使用任何流控制语句(条件语句,循环等).