我想以一种更简洁的方式执行以下操作,并且我想使用一个生成器:
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]
我希望有十个浮点数的列表,但我得到了:
[无, 没有, 没有, 没有, 没有, 没有, 没有,...
答案 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)