这是伪代码:
class Foo (list):
def methods...
foo=Foo()
foo.readin()
rule='....'
bar=[for x in foo if x.match(rule)]
这里,bar是一个列表,但我希望它是Foo的一个实例,我知道的唯一方法是创建一个for循环并逐个追加项目:
bar=Foo()
for item in foo:
if item.match(rule):
bar.append(item)
所以我想知道是否有更简洁的方法或更多的pythonic方法来做到这一点?
答案 0 :(得分:4)
您可以将generator expression传递给Foo()
来电:
bar = Foo(x for x in foo if x.match(rule))
(当将生成器表达式传递给调用时,它是唯一的参数,您可以删除通常放在生成器表达式周围的括号)。
答案 1 :(得分:-1)
似乎另一个答案被删除了,因为原来的回答者删除了它。所以我在这里发布另一种方式来完成。如果原始回答者恢复了他的答案,我将自己删除这个答案。
另一种方法是使用build in filter函数。代码是:
bar=filter( lambda x: x.match(rule) , foo )
我想为什么原来的答案家伙删除了他的答案,因为据说这是一个不鼓励使用过滤功能。在问这个问题之前,我做了一些研究。但我想我从那个答案中学到了很多东西。因为我自己试图使用过滤功能,但从未弄清楚如何正确使用它。所以这个答案告诉我如何正确阅读手册,无论如何,它仍然是解决我的问题的有效方法。所以在这里,如果原始的回答者可以看到我的帖子,谢谢你,我感谢你的帮助,这肯定帮助了我。
更新: 正如Martijn在评论中所说的那样,这不是一个有效的答案。我会保持这个因为这个谈话很好。但这不是解决我问题的有效方法。