2016-09-22 85 views
0

如何在有多個輸入列表時在列表理解中使用if語句。這裏是我使用的代碼和我得到的錯誤:如果在Python列表理解中使用多個輸入列表

(我知道它不能將模數應用於列表,但不知道如何在每個列表中專門引用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' 

回答

3

這是不是與if聲明的原因,這裏的問題是x in (a, b)。當執行,x呈現出list值(第一a,然後b),然後Python會嘗試在它執行您if條件,形式的表達:

[1, 2, 3] % 2 

做,這顯然ISN不允許。

相反,使用chainitertools到鏈兩份名單一起,從他們做出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

正如Jim所說,你是mod列表到int。您可以使用+,例如nums = [x**2 for x in a+b if x%2==0]