[英]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.