Python에는 Python과 함께 제공되는 표준 도구 패키지 중 하나인 itertools라는 강력한 반복 도구 패키지가 있습니다.
itertools는 내장 라이브러리이므로 설치할 필요가 없습니다. itertools 가져오기
만 하면 됩니다. import itertools
即可。
product 用于求多个可迭代对象的笛卡尔积(Cartesian Product)
,它跟嵌套的 for 循环等价.即:
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示为X × Y
。
product(A, B)
和 ``((x,y) for x in A for y in B)`一样.
import itertools for item in itertools.product([1,2,3],[100,200]): print(item) # 输出如下 (1, 100) (1, 200) (2, 100) (2, 200) (3, 100) (3, 200)复制代码
通俗地讲,permutations就是返回可迭代对象的所有数学或者字符的全排列方式。
全排列,即产生指定数目的元素的所有排列(顺序有关),也就是高中排列组合中的那个A
。
permutations它接受一个集合对象,然后产生一个元组序列。
比如print(list(itertools.permutations('abc',3)))
,共有种情况。
items = ['a','b','c'] from itertools import permutations for i in permutations(items): print(i) #排列组合 print(list(itertools.permutations('abc',3))) # 输出如下 ('a', 'b', 'c') ('a', 'c', 'b') ('b', 'a', 'c') ('b', 'c', 'a') ('c', 'a', 'b') ('c', 'b', 'a') [('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]复制代码
如果需要指定长度的所有排列,可以传递一个可选的长度参数r
。
items = ['a','b','c'] from itertools import permutations for i in permutations(items,2): print(i) #排列组合 # 输出如下 ('a', 'b') ('a', 'c') ('b', 'a') ('b', 'c') ('c', 'a') ('c', 'b')复制代码
求列表或生成器中指定数目的元素不重复的所有组合
itertools.permutations(iter,r)
和 itertools.combinations(iter,r)
的区别是:前者是permutations
允许重复使用,后者combinations
是不能重复使用
>>> print(list(itertools.combinations('abc',3))) [('a', 'b', 'c')]复制代码
combinations_with_replacement
和combinations
很相似,唯一的不同在于前者combinations_with_replacement
集合类型中的数据是可以重复的
>>> print(list(itertools.combinations_with_replacement('abc',3))) [('a', 'a', 'a'), ('a', 'a', 'b'), ('a', 'a', 'c'), ('a', 'b', 'b'), ('a', 'b', 'c'), ('a', 'c', 'c'), ('b', 'b', 'b'), ('b', 'b', 'c'), ('b', 'c', 'c'), ('c', 'c', 'c')]复制代码
accumulate
用于对列表中元素逐个累加
>>> import itertools >>> x = itertools.accumulate(range(10)) >>> print(list(x)) [0, 1, 3, 6, 10, 15, 21, 28, 36, 45]复制代码
compress()
是筛选工具,它接受一个可迭代对象以及一个布尔选择序列作为输入,输出时会将所有布尔序列中为True的可迭代对象输出。
import itertools its=["a","b","c","d","e","f","g","h"] selector=[True,False,1,0,3,False,-2,"y"] for item in itertools.compress(its,selector): print (item) a c e g h 复制代码
count(初值=0, 步长=1)
(Cartesian Product)
의 데카르트 곱을 찾는 데 사용됩니다. 이는 중첩된 for 루프와 동일합니다. 즉: Cartesian product는 수학에서 데카르트 곱을 나타냅니다. 두 집합 X와 Y의 곱(직접 곱이라고도 함)은 X × Y
로 표현됩니다.
product(A, B)
는 ``((x,y) for x in A for y in B)`와 동일합니다.
from itertools import count for i in count(10): #从10开始无限循环 if i > 20: break else: print(i) 10 11 12 13 14 15 16 17 18 19 20复制代码
일반인의 관점에서 순열은 반복 가능한 객체의 모든 수학 또는 문자의 전체 배열을 반환합니다.
A
입니다. 순열 컬렉션 객체를 받아들인 다음 일련의 튜플을 생성합니다.
예를 들어🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜=🎜🎜🎜🎜6🎜🎜🎜🎜🎜 상황. 🎜print(list(itertools.permutations('abc',3)))
에는 가 있습니다.3
import itertools chain = itertools.chain([1, 2, 3], [4, 5, 6]) for c in chain: print(c) 1 2 3 4 5 6 复制代码
r
를 전달할 수 있습니다. 🎜>>> list(itertools.chain([1, 2, 3], [4, 5], [6] ,[7,8])) [1, 2, 3, 4, 5, 6, 7, 8]复制代码
itertools.permutations(iter, r)
및 itertools.combinations(iter,r)
의 차이점은 다음과 같습니다. 전자는 순열
이며 재사용이 허용되는 반면 후자는 조합
재사용할 수 없습니다🎜import itertools cycle = itertools.cycle([1, 2, 3]) for c in cycle: print(c)复制代码
combinations_with_replacement
와 combinations
는 매우 유사하며 유일한 차이점은 이전 combinations_with_replacement 컬렉션 유형 데이터가 반복될 수 있습니다🎜rrreeeaccumulate
는 목록의 요소를 하나씩 누적하는 데 사용됩니다. 🎜rrreeecompress()
는 필터링 도구입니다. 출력할 때 반복 가능한 개체와 부울 선택 시퀀스를 허용합니다. 부울 시퀀스에서 True인 모든 반복 가능한 객체를 출력합니다. 🎜rrreeecount(initial value=0, step=1)
는 전달된 시작 매개변수에서 균등한 간격으로 시작하여 반복자를 생성하는 것입니다. 가치. 🎜🎜주로 반복을 위해 여러 시퀀스를 함께 연결하는 데 사용되는 간단한 예🎜rrreee🎜chain🎜🎜체인 체인을 살펴보겠습니다. 🎜rrreee🎜체인에는 목록을 평면화하는 매우 중요한 기능도 있습니다. 🎜rrreee🎜cycle🎜rrreee🎜연산 결과 출력은 1 2 3 1 2 3... 계속 돌고 돌고 멈추지 않습니다. 🎜🎜🎜🎜관련 무료 학습 권장사항: 🎜🎜🎜python 비디오 튜토리얼🎜🎜🎜🎜위 내용은 Python의 itertools 모듈에 대한 심층적인 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!