[英]List comprehension with if condition in python
我有一個包含int和str類型的元素的列表。 我需要將int元素復制到另一個列表。 我嘗試了無法理解的列表理解。 我的等效循環正在工作。
input = ['a',1,'b','c',2,3,'c','d']
output = []
[output.append(a) for a in input if type(a) == int]
[無,無,無]
循環中的相同邏輯。
output = []
for a in input:
if type(a) == int:
output.append(a)
print(output)
[1,2,3,]
我能知道是什么造成了變化。
在執行操作時:
input = ['a',1,'b','c',2,3,'c','d']
output = []
[output.append(a) for a in input if type(a) == int]
append
返回None
,這就是為什么很多都不存在的原因
順便說一句,:
print(output)
將是理想的結果。
您的邏輯實際上有效!
但是將列表理解作為副作用是不好的,所以最好的方法是:
output=[a for a in input if type(a) == int]
最后的最佳選擇是isinstance
:
output=[a for a in input if isinstance(a,int)]
慣用的解決方案是:
input = ['a', 1, 'b', 'c', 2, 3, 'c', 'd']
output = [a for a in input if type(a) == int]
您不想使用output.append。 列表理解暗示了這一點。 您可以將理解中的第一個a更改為包含a的表達式。 output.append(a)是一個返回NONE的方法調用
當您想將值收集到要分配給變量的列表中或作為較大表達式的一部分時,請使用列表推導。 請勿將它們作為“ for循環”的其他格式用於副作用。 而是使用for循環。
逗號后的空格不是必需的,但被認為是好的樣式。
input = ['a',1,'b','c',2,3,'c','d']
output = [a for a in input if type(a) == int]
列表理解自動創建列表-無需使用append()
您可以使用以下解決方案來解決您的問題:
output = [a for a in input if type(a) == int]
一個解決方案是:
input = ['a',1,'b','c',2,3,'c','d']
output=[item for item in input if type(item) is int] or
output=[item for item in input if isinstance(item,int)]
最后一個比第一個更快。
但是當您使用時:
input = ['a',1,'b','c',2,3,'c','d']
output=[]
[output.append(a) for a in input if type(a) == int]
這意味着代碼執行了兩個結果,一個是輸出.append(a)最后追加對象,並且如果條件在執行后創建了一個新的列表對象,則列表理解為a.append()( Look_in_IDLE )返回None ,因此是三個無。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.