当存在多个输入列表时,如何在列表推导中使用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'
答案 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]
。