[英]Using if for multiple input lists in Python 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'
这不是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]
正如吉姆说,你是mod
的列表为int
。
您也可以使用+
,例如nums = [x**2 for x in a+b if x%2==0]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.