Python Itertools简介及实例

125 阅读4分钟

Python Itertools

Python Itertools简介

Python Itertools 是有助于实现内存效率的工具,如果单独或组合使用,它们会非常有用。这里提供的函数与SML和Haskell类语言的函数非常相似。快速的性能和高效的内存处理是这些迭代工具的两个关键能力。

为什么是Python itertools?

使用itertools的关键原因之一是它能够非常有效地使用内存。基于迭代器的工具在某一特定时间内不会持有任何大的内存,因为将要产生的数据在处理之前不会保留在内存中,这就自动减少了内存的使用能力,并将相对减少像大数据集和性能问题。

迭代工具是如何工作的?

基本上,迭代的概念被分为三种类型;它们如下:

  1. 无限迭代器
  2. 在短的输入序列上终止的迭代器
  3. 组合式迭代器

以下是属于这些迭代器的函数或方法,并举例说明。

1.无限迭代器

像列表、图元、字典和集合这样的迭代器类型不一定需要穷尽,这意味着在某些情况下,它可以被无限地循环。这些产生无限循环的方法被称为无限迭代器。

  • Count()

count()函数提到了一个特定项目在迭代器中出现的次数。

例子

List = [1,4,2,9,7,8,9,3,1] print("List Verified:",List)
print("Count of value '9' in the list:",List.count(9))

输出:

Python Itertools output 1

  • itertools.cycle()

cycle()函数连续、无缝地重复给定的迭代集。

例子:

import itertools
Iter_List = [1,2,4] result = itertools.cycle(Iter_List)
count = 0
print("First three Output Cycle Printed:")
for value in result:
count = count + 1
if count < 10:
print(value)
else:
break

输出:

Python Itertools output 2

  • itertools.repeat()

Itertools.repeat()用于重复一个给定值的n次。

例子:

import itertools
Iter_List = [1,2,4] print("Print the above Iter_List 3 times")
result = itertools.repeat(Iter_List,3)
count = 0
for value in result:
count = count + 1
if count < 10:
print(value)
else:
break

输出:

Python Itertools output 3

2.迭代器终止于一个短的输入序列。

这些情况是指两个或更多的迭代器在某些特定的逻辑上组合成一个单一的迭代器。如果输入的迭代器中有一个比较小,那么一旦最短的输入被用完,迭代器就不会中断。

  • itertools.chain()

chain()方法用于将两个迭代器合并为一个迭代器实体。

例子:

import itertools
Iter1 = [4,2,4] Iter2 = [7,1,6,8] print("Keyed In Input List1:",Iter1)
print("Keyed In Input List2:",Iter2)
Chained_List = list(itertools.chain(Iter1,Iter2))
print("Chained List:",Chained_List)

输出:

Python Itertools output 4

  • itertools.compress()

compress()方法是用来根据通过一个参数传递的布尔值有选择地挑选数值。

例子。

import itertools
Iter1 = ['Istanbul','Karachi','Colombo','Mumbai','Delhi','California'] Iter2 = [0,0,0,1,True,False] print("Input List",Iter1)
Compressed_List = list(itertools.compress(Iter1,Iter2))
print("Cities in India:",Compressed_List)

输出:

Python Itertools output 5

  • itertools.dropwhile(),Itertools.takewhile()

dropwhile()返回一个iter值的列表,这些值是在第一次条件失败后落下的。takewhile()返回在第一次条件失败之前的iter值的列表。

例子:

import itertools
Iter_values = [1,3,45,2,4,6,78,89,0,1,3,4,555,4] dropwhile_List = list(itertools.dropwhile(lambda iter: iter < 10,Iter_values))
takewhile_List = list(itertools.takewhile(lambda iter: iter < 10,Iter_values))
print("Values not dropped:",dropwhile_List)
print("Values not taken:",takewhile_List)

输出:

output 6

  • itertools.filterfalse()

filterfalse() 过滤那些不满足给定条件的迭代器。

例子:

import itertools
Iter_values = [1,3,45,2,4,6,78,89,0,1,3,4,555,4] print("Iter Verified:",Iter_values)
filterfalse_List = list(itertools.filterfalse(lambda iter: iter < 10,Iter_values))
print("False values (Iters greater than 10):",filterfalse_List)

输出:

output 7

  • itertools.islice()

使用提到的索引从迭代器列表中切出提到的迭代器值范围。

例子:

import itertools
Iter_values = [1,3,45,2,4,6,78,89,0,1,3,4,555,4] print("Iter Involved:",Iter_values)
filterfalse_List = list(itertools.islice(Iter_values,2,7))
print("Iter sliced by position:",filterfalse_List)

输出:

output 8

3.组合式迭代器

组合迭代器负责进行组合、互换和计算笛卡尔积。下面是四个主要的组合迭代器。

  • itertools.product()

product()方法用于计算可迭代实体的笛卡尔值。

例子:

import itertools
Iter_values = [1,3,5] print("Iter Involved:",Iter_values)
Cartesian_List = list(itertools.product(Iter_values,'2'))
print("Cartesian Output:",Cartesian_List)

输出:

output 9

  • itertools.combinations()

combinations()方法用于为给定的iter生成所有可能的组合。

例子:

import itertools
Iter_values = [1,3,5] print("Iter Involved:",Iter_values)
Cartesian_List = list(itertools.combinations(Iter_values,3))
print("Cartesian Output:",Cartesian_List)

输出:

output 10

  • zip()

zip()函数将两个单独的、集体的数据类型项目压缩成一个元组。这意味着两个元素中的第一个项目形成了结果元组中的第一个元组项目;同样,两个元素中的第二个项目形成了结果元组中的第二个元组,元组的形成还在继续。当数据类型项目的长度不同时,那么长度最小的元素决定最终元组的长度

例子:

Set1= (1, 2)
Set2 = ("India", "China", "Pakistan")
print("Value in set1:",Set1)
print("Value in set2:",Set2)
Output_Set = zip(Set1,Set2)
print("Output Set:",set(Output_Set))

输出:

output 11

  • map()

map函数用于为迭代器中的每一个元素执行一个提到的函数。

例子:

def myfunc(a, b):
return a + b
x = map(myfunc, (1,2,3), (4,5,6))
print(list(x))

输出:

output 12

结论

Itertools绝对是Python领域中最强大的工具之一。它们有助于产生大量的内存效率和程序逻辑的减少。