📜  Python – Itertools.takewhile()

📅  最后修改于: 2022-05-13 01:54:22.553000             🧑  作者: Mango

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)
输出: