Python – Itertools.takewhile()
itertools 是Python中的一个模块,具有一组用于处理迭代器的函数。它们使遍历列表和字符串等可迭代对象变得非常容易。一个这样的 itertools函数是takewhile()
。
注意:更多信息请参考Python Itertools
暂时()
这允许从可迭代中考虑一个项目,直到指定的谓词第一次变为 false。在大多数情况下,iterable 是一个列表或字符串。顾名思义,它从序列“while”中“获取”元素,谓词为“true” 。此函数属于“终止迭代器”类别。输出不能直接使用,必须转换为另一种可迭代的形式。大多数情况下,它们被转换为列表。
句法:
takewhile(predicate, iterable)
predicate
要么是内置函数,要么是用户定义函数。它甚至可以是 lambda 函数。
下面给出了使用简单 if-else 的一般函数。
def takewhile(predicate, iterable):
for i in iterable:
if predicate(i):
return(i)
else:
break
函数takewhile()
接受一个谓词和一个可迭代对象作为参数。迭代可迭代以检查其每个元素。如果指定谓词上的元素评估为真,则返回。否则,循环终止。
示例 1:列表和 takewhile()
考虑一个整数列表。我们只需要输出中的偶数。查看下面的代码,看看如果我们使用takewhile()
会发生什么。
from itertools import takewhile
# function to check whether
# number is even
def even_nos(x):
return(x % 2 == 0)
# iterable (list)
li =[0, 2, 4, 8, 22, 34, 6, 67]
# output list
new_li = list(takewhile(even_nos, li))
print(new_li)
[0, 2, 4, 8, 22, 34, 6]
示例 2:字符串和 takewhile()
考虑一个字母数字字符串。现在我们需要取元素,只要它们是数字。
from itertools import takewhile
# function to test the elements
def test_func(x):
print("Testing:", x)
return(x.isdigit())
# using takewhile with for-loop
for i in takewhile(test_func, "11234erdg456"):
print("Output :", i)
print()
输出:
Testing: 1
Output : 1
Testing: 1
Output : 1
Testing: 2
Output : 2
Testing: 3
Output : 3
Testing: 4
Output : 4
Testing: e
iterable 也可以直接传递。在将它们传递给takewhile()
函数之前,不必将它们分配给某个变量。
示例 3:takewhile() 中的 lambda 函数
考虑输入字符串的元素,直到遇到“s”。
from itertools import takewhile
# input string
st ="GeeksforGeeks"
# consider elements until
# 's' is encountered
li = list(takewhile(lambda x:x !='s', st))
print(li)
输出:
['G', 'e', 'e', 'k']
示例 4:
以随机顺序制作一个字母列表并考虑元素,直到遇到“e”或“i”或“u”。
import random
from itertools import takewhile
# generating alphabets in random order
li = random.sample(range(97, 123), 26)
li = list(map(chr, li))
print("The original list list is :")
print(li)
# consider the element until
# 'e' or 'i' or 'o' is encountered
new_li = list(takewhile(lambda x:x not in ['e', 'i', 'o'],
li))
print("\nThe new list is :")
print(new_li)
The original list list is :
[‘v’, ‘u’, ‘k’, ‘j’, ‘r’, ‘q’, ‘n’, ‘y’, ‘a’, ‘x’, ‘i’, ‘p’, ‘e’, ‘w’, ‘b’, ‘t’, ‘s’, ‘l’, ‘z’, ‘m’, ‘f’, ‘c’, ‘g’, ‘d’, ‘o’, ‘h’]
The new list is :
[‘v’, ‘u’, ‘k’, ‘j’, ‘r’, ‘q’, ‘n’, ‘y’, ‘a’, ‘x’]