繁体   English   中英

替代列表理解

[英]Alternative 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)会为list3生成1

我想通过列表理解来表示后续代码:

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条件,因此可以认为这个问题是多余的,但是发布的替代方案对我来说可能非常有用。

您可以使用条件表达式:

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

在这里, 1 if sum(x) == 0 else 01 if sum(x) == 0 else 0直接表示条件。

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

另一种选择是将逻辑分解为一个函数,然后从列表理解中调用该函数。 这将允许逻辑使用任何流控制语句(条件语句,循环等)。

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM