排除以特定字符开头的列表元素的最pythonic方法是什么?

the*_*rld 9 python coding-style

我有一个字符串列表.我想获得一个新的列表,在保留订单的同时排除以"#"开头的元素.什么是最蟒蛇的方式?(最好不要使用循环?)

jam*_*lak 27

[x for x in my_list if not x.startswith('#')]
Run Code Online (Sandbox Code Playgroud)

这是最诡计多端的做法.任何这样做的方式最终都会在Python或C中使用循环.


ham*_*ene 10

不使用循环?有filter内置:

filter(lambda s: not s.startswith('#'), somestrings)
Run Code Online (Sandbox Code Playgroud)

请注意,在Python 3中,它返回iterable而不是列表,因此您可能需要将其包装起来list().

  • @MoZo列表推导优于`filter`,`map`等,如果与`lambda`配对.如果你有类似`filter(str.isalpha,somestrings)`的东西,`filter`可能会更好.这也比列表comp慢. (3认同)
  • @MoZo我觉得这里没什么区别.在这个简单的例子中,我会使用循环.但是当谓词函数很复杂时,它只是"过滤器". (3认同)