Python:更清晰的列表理解

时间:2010-05-04 03:25:40

标签: python list-comprehension

有更简洁的方式来写这个:

for w in [w for w in words if w != '']:

我想循环遍历字典words,但仅限于!= ''的字词。谢谢!

6 个答案:

答案 0 :(得分:6)

这里不需要listcomp。只需写下:

for w in words:
    if w != '':
        # ...

答案 1 :(得分:2)

假设你在关键之后,为什么不试试:

[w for w in words if w]

答案 2 :(得分:1)

filter(lambda w: w != '', words)filter(None, words)

这是建议,它可能不是解决您问题的最佳方法。

答案 3 :(得分:1)

测试元素不等于''不会过滤掉空格元素。如果这就是你所追求的,你可能想要使用str.isspace(或正则表达式)。

如果使用列表推导,则会将列表的额外副本作为中间对象。可能不是什么大不了的事,但是发电机不会使用额外的内存。

我会这样做,有一个发电机:

for word in (w for w in words if not w.isspace()):
    # do stuff

答案 4 :(得分:1)

我认为您的解决方案是次优的。你在列表words上迭代两次 - 一次在列表解析中创建非空项,再在循环中进行处理。如果你使用像这样的genexp会更好。

for w in (x for x in words if x): process(w)

这样,genexp会懒惰地返回一个非空值列表。

答案 5 :(得分:0)

外圈for的主体有什么作用?

如果是函数调用,您可能会这样做:

[f(w) for w in words if w != '']