生成器替换for循环

时间:2019-05-19 00:00:53

标签: python-3.x

我想以一种更简洁的方式执行以下操作,并且我想使用一个生成器:

beta=[] 
for e in shortlist:
    beta.append(np.nanmean(e))

其中shortlist是我将50个元素的列表转换为10个列表的列表,每个列表5个元素的列表。 因此,基本上,我要对第一个列表进行装箱并取平均值。

结果符合我的预期:列出了10个浮点数,我仍然可以使用它。

我认为这样做会更好,并且看起来更漂亮:

beta=[] 

[beta.append(np.nanmean(i)) for i in shortlist]

我希望有十个浮点数的列表,但我得到了:

[无,  没有,  没有,  没有,  没有,  没有,  没有,...

1 个答案:

答案 0 :(得分:2)

您在此处尝试使用列表理解的方式会否定使用它的大多数好处。理解会自动创建并返回新列表;您无需手动创建一个并将其附加到其中。

返回列表的元素是对理解的左侧求值的任何元素,并且append返回None。由于append返回None,因此这就是理解返回的列表。

只需将其简化为:

beta = [np.nanmean(i) for i in shortlist]
#       ^ This is what's added to the list

还有一个注意事项,那就是您那里没有生成器表达式;这是一个列表理解。如果要使用生成器表达式来利用惰性,则应为(请注意()):

beta = (np.nanmean(i) for i in shortlist)