【发布时间】:2016-03-03 14:34:27
【问题描述】:
假设我有一个数组:
array=[1,0,2,3,4,0,0,5,6,0]
我想要一个只返回数字而不是零的列表。所以我做了这个并且它有效:
print(list(y for y in array if y!=0)
我尝试了另一种没有列表理解的方法,但它不起作用,有人可以解释为什么吗?
for y in array:
if y!=0:
print(list(y))
还有什么方法可以打印不带 0 的数字列表?
编辑:我尝试使用 for 循环来解决这个问题,如果我在顶部创建一个空列表,它就可以工作。它有效,但我不明白为什么!但是为什么这个有效而另一个无效呢?就速度/内存而言,这个或列表理解哪个更有效?
array=[1,0,2,3,4,0,0,5,6,0]
list=[]
for y in array:
if y!=0:
list.append(y)
print(list)
【问题讨论】:
-
您能解释一下为什么您认为第二个版本与第一个相同吗?
-
filter(lambda el: el != 0, array)(但是,请使用[el for el in array if el != 0] -
@RickTeachey 呃。好吧,在第一个版本中,我看到了“for y in array”,这就是我开始第二个版本的方式。然后回到第一个版本,我看到 'if y!=0' 所以我在第二个版本中写了这个。然后他们两个都打印出 y!我确实注意到,在第一个版本中,所有内容都转换为列表,而第二个版本,我尝试仅将 y 转换为列表。但我还是不明白发生了什么
-
temp = (y for y in array if y!=0) 是类型生成器。 list(temp) 将返回一个列表。但 list(0) 会报错,见这里stackoverflow.com/questions/19523563/…。
-
@RickTeachey 在第二个版本中:如果我只是打印(y),我会得到一个没有零的所有数字的迭代,这很好。我只是尝试通过执行 list(y) 将其转换为列表,但它不起作用。