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


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


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

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

chain()函数

它是一个需要一系列可迭代对象并返回一个可迭代对象的函数。它将所有可迭代对象组合在一起,并生成一个可迭代对象作为输出。它的输出不能直接使用,因此不能显式转换为可迭代对象。此函数在终止迭代器的类别迭代器下。


用法:

chain (*iterables)

链条的永恒工作可以如下实现:

def chain(*iterables):
     for it in iterables:
       for each in it:
           yeild (each)

范例1:奇数和偶数在单独的列表中。合并它们以形成一个新的单个列表。

from itertools import chain 
  
# a list of odd numbers 
odd =[1, 3, 5, 7, 9] 
  
# a list of even numbers 
even =[2, 4, 6, 8, 10] 
  
# chaining odd and even numbers 
numbers = list(chain(odd, even)) 
  
print(numbers)
输出:
[1, 3, 5, 7, 9, 2, 4, 6, 8, 10]

范例2:列表中有一些辅音。元音在列表中给出。合并它们并对其进行排序。

from itertools import chain 
  
# some consonants 
consonants =['d', 'f', 'k', 'l', 'n', 'p'] 
  
# some vowels 
vowels =['a', 'e', 'i', 'o', 'u'] 
  
# resultatnt list 
res = list(chain(consonants, vowels)) 
  
# sorting the list 
res.sort() 
  
print(res)
输出:
['a', 'd', 'e', 'f', 'i', 'k', 'l', 'n', 'o', 'p', 'u']

范例3:在下面的示例中,每个String被认为是可迭代的,并且其中的每个字符都被视为迭代器中的一个元素。这样就产生了每个角色

from itertools import chain 
  
res = list(chain('ABC', 'DEF', 'GHI', 'JKL')) 
  
print(res)
输出:
['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L']

范例4:

from itertools import chain 
  
st1 ="Geeks"
st2 ="for"
st3 ="Geeks"
  
res = list(chain(st1, st2, st3)) 
print("before joining:", res) 
  
ans =''.join(res) 
print("After joining:", ans)
输出:

before joining:[‘G’, ‘e’, ‘e’, ‘k’, ‘s’, ‘f’, ‘o’, ‘r’, ‘G’, ‘e’, ‘e’, ‘k’, ‘s’]
After joining:GeeksforGeeks

chain.from_iterable()函数

它类似于链,但可用于从单个可迭代项中链接项目。差异在以下示例中得到了证明:

范例5:

from itertools import chain 
  
li =['ABC', 'DEF', 'GHI', 'JKL'] 
  
# using chain-single iterable. 
res1 = list(chain(li)) 
  
  
res2 = list(chain.from_iterable(li)) 
  
print("using chain:", res1, end ="\n\n") 
  
print("using chain.from_iterable:", res2)
输出:

using chain:[‘ABC’, ‘DEF’, ‘GHI’, ‘JKL’]

using chain.from_iterable:[‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’]

范例6:现在考虑下面的列表:

li=['123', '456', '789']

您应该考虑每个数字来计算列表的总和。因此答案应该是:

1+2+3+5+6+7+8+9 = 45

使用下面的代码可以轻松实现:

from itertools import chain 
  
li =['123', '456', '789'] 
  
res = list(chain.from_iterable(li)) 
  
print("res =", res, end ="\n\n") 
  
new_res = list(map(int, res)) 
  
print("new_res =", new_res) 
  
sum_of_li = sum(new_res) 
  
print("\nsum =", sum_of_li)
输出:
res = ['1', '2', '3', '4', '5', '6', '7', '8', '9']

new_res = [1, 2, 3, 4, 5, 6, 7, 8, 9]

sum = 45

为了简化它,我们结合了这些步骤。下面给出了一种优化的方法:

from itertools import chain 
  
li =['123', '456', '789'] 
  
res = list(map(int, list(chain.from_iterable(li)))) 
  
sum_of_li = sum(res) 
  
print("res =", res, end ="\n\n") 
print("sum =", sum_of_li)
输出:
res = [1, 2, 3, 4, 5, 6, 7, 8, 9]

sum = 45



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