Python中带有if条件的列表推导式

3

我有一个包含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,]

我可以了解是什么导致了差异。

请注意,保留了HTML标签。


4
你的逻辑是可行的,只需要在最后加上print(output) - jpp
1
你的列表推导式从未得到任何值,它只是不断将它们传递给输出,如果你想让它们进入列表推导式,只需写一个if而不是'output.append(a)'。 - Jonas Wolff
你的原始代码运行良好。 - idnavid
5个回答

10

当你正在做:

input = ['a',1,'b','c',2,3,'c','d']
output = []
[output.append(a) for a in input if type(a) == int] 
< p > append 返回 None ,这就是为什么有很多none的原因

顺便说一句:

print(output)

将会得到期望的结果。

你的逻辑实际上是可行的!

但是,使用列表推导式作为副作用并不好,所以最好的方法是:

output=[a for a in input if type(a) == int] 

最后最好的方法是使用 isinstance

output=[a for a in input if isinstance(a,int)] 

3

一种惯用的解决方案是:

    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循环。
逗号后面的空格不是必需的,但被认为是良好的风格。

2
input = ['a',1,'b','c',2,3,'c','d']
output = [a for a in input if type(a) == int] 

列表推导式会自动创建列表 - 不需要使用append()

0
您可以使用以下解决方案来解决您的问题:
output = [a for a in input if type(a) == int]

0
一个解决方案是:
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] 

这意味着代码执行两个结果,一个是output.append(a)将对象附加在末尾,另一个是带有if条件的列表推导式在执行后创建一个新的列表对象,因为a.append()(在IDLE中查看)返回None,所以有三个None。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接