itertools.ifilter与过滤器与列表理解的问题?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (166)

代码如下:

>>> itertools.ifilter(lambda x: x%2, range(5))
<itertools.ifilter object at 0x7fb1a101b210>
>>> for i in itertools.ifilter(lambda x: x%2, range(5)): print i
... 
1
3
>>> filter(lambda x: x%2, range(5))
[1, 3]
>>> function = lambda x: x%2
>>> [item for item in range(5) if function(item)]
[1,3]
提问于
用户回答回答于

可以这样:

import itertools

def number_generator():
    for i in range(0, 3):
        print "yield", i
        yield i
    print "stopping"

function = lambda x: x > 0

numbers = number_generator()
print "itertools.ifilter:"
for n in itertools.ifilter(function, numbers):
    print n

print "\nfilter:"
numbers = number_generator()
for n in filter(function, numbers):
    print n

产出:

itertools.ifilter:
yield 0
yield 1
1
yield 2
2
stopping

filter:
yield 0
yield 1
yield 2
stopping
1
2
用户回答回答于

试试这个:

list(ifilter(...))

你也可能对什么感兴趣佩普289说到过滤器和IFILTER:

列表理解大大减少了对filter()map()...。同样,生成器表达式也将减少对itertools.ifilter()itertools.imap()......

还请注意ifilterfilter在Python-3中(因此从迭代工具中删除)。

所属标签

可能回答问题的人

  • EatRice

    16 粉丝0 提问11 回答
  • 华讯云

    0 粉丝0 提问4 回答
  • 学生

    8 粉丝476 提问4 回答
  • 不吃貓的鱼oo

    7 粉丝466 提问3 回答

扫码关注云+社区

领取腾讯云代金券