当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Itertools.takewhile()用法及代码示例


itertools是Python中的一个模块,具有用于处理迭代器的函数集合。它们使遍历列表和字符串之类的可迭代对象变得非常容易。这样的itertools函数之一是takewhile()

注意:有关更多信息,请参阅Python Itertools。

takewhile()

这允许从迭代开始考虑一个项目,直到指定的谓词首次变为假。在大多数情况下,迭代器是列表或字符串。顾名思义,“take”是序列“while”中的元素,谓词是“true”。该函数属于“terminating iterators”类别。输出不能直接使用,而必须转换为另一种可迭代的形式。通常,它们会转换为列表。


用法:

takewhile(predicate, iterable)

predicate是内置函数或用户定义的函数。它甚至可以是lambda函数。

下面给出了使用简单if-else对该函数的一般实现。

def takewhile(predicate, iterable):
   for i in iterable:
       if predicate(i):
            return(i)
       else:
            break

函数takewhile()以谓词和可迭代作为参数。迭代iterable以检查其每个元素。如果指定谓词上的元素的值为true,则将其返回。否则,循环终止。

示例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()
考虑一个alpha-numerical字符串。现在,我们需要将元素取为数字。

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

可迭代对象也可以直接传递。将它们传递给某些变量不是强制性的 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’]



相关用法


注:本文由纯净天空筛选整理自erakshaya485大神的英文原创作品 Python – Itertools.takewhile()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。