当元素< = limit时,是否有内置函数(或其他方法)迭代列表?

时间:2014-09-30 18:15:31

标签: python python-2.7 iterator

我希望能够在元素小于或等于某个限制时迭代列表。我自己创建了一个函数来生成我想要的结果,但是我想知道是否有一个函数可以为我做这个,或者如果结果可以像列表理解那样重现,所以我不必做单独的函数调用?基本上,我想知道是否有更短/更快的方式来迭代这样,因为我需要在多个python文件和大型迭代中使用它。

我查看了python 2.7的itertools文档https://docs.python.org/2/library/itertools.html,我认为它会有我想要的东西(它可能有,但我错过了,因为我不理解一对itertools中的函数。

以下是我所拥有的以及我想要的结果的示例:

def iterList(iList, limit):
    index = 0
    while index < len(iList) and iList[index] <= limit:
        yield iList[index]
        index += 1

primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
smallPrimes = list()
for p in iterList(primes, 19):
    smallPrimes.append(p)

print smallPrimes
# now smallPrimes == [2, 3, 5, 7, 11, 13, 17, 19]

2 个答案:

答案 0 :(得分:7)

您使用itertools.takewhile()

from itertools import takewhile

for p in takewhile(lambda i: i < 20, primes):

takewhile迭代,直到谓词不再为真。

演示:

>>> from itertools import takewhile
>>> primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
>>> for p in takewhile(lambda i: i < 20, primes):
...     print p
... 
2
3
5
7
11
13
17
19

答案 1 :(得分:2)

您正在搜索takewhile: 只要谓词为真,它就会产生一个产生元素的迭代器。

takewhile(lambda x: x<5, [1,4,6,4,1]) # --> 1 4