回答
这里你不需要listcomp。只要写:
for w in words:
if w != '':
# ...
好的。值得一试。 – ash 2010-05-04 03:31:27
除列表理解是迭代的pythonic方式.... – 2010-05-04 03:33:21
@Daniel Goldberg,谁说,我认为'for'是用于迭代,并且由于OP正在做它是过度的,@ dan04 +1,那是正确的方法...... IMO – 2010-05-04 03:37:01
假设你的钥匙后,为什么不尝试:
[w for w in words if w]
filter(lambda w: w != '', words)
或filter(None, words)
这是暗示,它可能不是你的问题的最佳解决方案。
“过滤器(P,S)几乎总是被写得更清晰,如[如果P(x)]中的[x for S]” - Guido van Rossum。 – 2010-05-04 03:39:01
@Nou我偏向于功能性的东西。同时guido真的不喜欢他们。他们有他们的位置,但可能不是OP问题 – Anycorn 2010-05-04 03:41:09
你的第一个片段是一个SyntaxError(我认为你的意思是'!='-'not'是不同的)。使用'filter'并不是某种功能*比使用列表理解(我们从别的地方偷走了一个想法,除了Haskell!),对lambda使用'filter'和'map'对我来说似乎非常愚蠢。 – 2010-05-04 03:46:04
测试一个元素不等于''
不会过滤掉空白元素。如果这就是你想要的,你可能想要使用str.isspace
(或者一个正则表达式)。
如果您使用列表理解,则会将列表的额外副本作为中介对象。可能不是什么大问题,但是一个生成器不会使用额外的内存。
我不喜欢这样,与发电机:
for word in (w for w in words if not w.isspace()):
# do stuff
什么是外for循环的身体呢?
如果它是一个函数调用你可能只是做:
[f(w) for w in words if w != '']
我认为您的解决方案是次优。您正在遍历列表words
两次 - 一次在列表理解中创建非空项并在循环中再次执行处理。如果你使用像这样的genexp会更好。
for w in (x for x in words if x): process(w)
这样,genexp将懒惰地返回一个非空值列表。
'对于w而言:如果x:过程(w)'看起来更简单,更短,更清晰。 – 2010-05-04 03:49:22
- 1. Dict从列表清单中理解python
- 2. 清洁邮件列表
- 3. 如何理解VIPER清洁架构?
- 4. Python列表理解加入列表清单
- 5. Python列表理解
- 6. 列表理解python
- 7. 如何清洁列和使用python
- 8. Django表单清洁
- 9. R列表中的Python列表理解?
- 10. Go列表中的Python列表理解
- 11. 从列表清单中清除列表理解?
- 12. 元组的Python列表,需要解压和清理
- 13. Gridview清理和整洁asp.net
- 14. 清理出口或不清洁
- 15. jQuery的清洁HTML表格
- 16. Python lambda与列表理解
- 17. 在Python列表理解
- 18. 包括Python列表理解
- 19. Python列表理解 - 移调
- 20. 高级Python列表理解
- 21. Python列表理解错误
- 22. 与Python列表理解
- 23. Python列表理解错误
- 24. Python,迭代列表理解
- 25. Python列表理解和SQLALCHEMY
- 26. Python不会理解列表
- 27. 简化Python列表理解
- 28. Python列表理解 - 简单
- 29. Python列表理解从列表
- 30. 列表索引Python和列表理解
“不是空白的词”,正如下面的评论者指出的那样,*与“!=”“'*不一样。如果这是您需要的,请使用'isspace'方法。 – 2010-05-04 04:58:38
对不起,我错过了,我不是指空白(编辑)。 – ash 2010-05-04 08:26:56