python - 替代列表理解

标签 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)会生成 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 条件自然包含在内,但发布的替代方案对我来说可能非常有用。

最佳答案

您可以使用条件表达式:

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?

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

关于python - 替代列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41168998/

相关文章:

python - 为什么我的字典在迭代输入时以错误的顺序打印?

python - python 中具有多个循环和 if 语句的列表理解

python - 如果值匹配,则将一个字典数组中的特定值合并到另一个字典数组中

python - 将两个整数列表组合成一个字符串列表

sql - 如何在 R 数据帧上执行类似 SQL 的操作?

python - 如何绘制非数值数据的日期时间和 value_counts() ?

python - 多个目录的错误处理

python - 没有名为 'socks' 的模块

php - 用php读取大json文件

python - 嵌套的 Python 列表理解