有更简洁的方式来写这个:
for w in [w for w in words if w != '']:
我想循环遍历字典words
,但仅限于!= ''
的字词。谢谢!
答案 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 != '']