我希望能够在元素小于或等于某个限制时迭代列表。我自己创建了一个函数来生成我想要的结果,但是我想知道是否有一个函数可以为我做这个,或者如果结果可以像列表理解那样重现,所以我不必做单独的函数调用?基本上,我想知道是否有更短/更快的方式来迭代这样,因为我需要在多个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]
答案 0 :(得分:7)
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