使用if for Python list comprehension

时间:2016-09-22 03:04:16

标签: python python-3.x list-comprehension

当存在多个输入列表时,如何在列表推导中使用if语句。这是我正在使用的代码和我得到的错误:

(我知道它无法将模数应用于列表,但不确定如何在迭代它们时在每个列表中专门引用x)

a = [1,2,3]
b = [4,5,6]

nums = [x**2 for x in (a,b) if x%2==0]
print(nums)

TypeError: unsupported operand type(s) for %: 'list' and 'int'

2 个答案:

答案 0 :(得分:3)

这不是if语句的原因,此处的问题是x in (a, b)。执行时,x会带有list值(第一个a,然后是b)然后Python会尝试在其上执行if条件,表达形式:

[1, 2, 3] % 2

完成了,显然是不允许的。

相反,使用chain中的itertools将两个列表链接在一起,并使x从中获取值:

a = [1,2,3]
b = [4,5,6]

nums = [x**2 for x in chain(a,b) if x%2==0]
print(nums)
[4, 16, 36]

如果你正在使用Python >= 3.5,你也可以在列表文字[]中解压缩:

nums = [x**2 for x in [*a, *b] if x%2==0] 

答案 1 :(得分:1)

正如吉姆所说,你mod的列表是int

您也可以使用+,例如nums = [x**2 for x in a+b if x%2==0]