python中itertools里的product和permutation

python中itertools里的product和permutation
平时经常碰到全排列或者在n个数组中每个数组选一个值组成的所有序列等等问题,可以用permutation和product解决,很方便,所以在此mark一下吧

直接上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from itertools import *
if __name__ == ‘__main__‘:
    for j in permutations([2,5,6]):
        print(j)
    ‘‘‘
    (2, 5, 6)
    (2, 6, 5)
    (5, 2, 6)
    (5, 6, 2)
    (6, 2, 5)
    (6, 5, 2)
    ‘‘‘
    list1 = [1, 2, 3]
    list2 = [4, 5, 6]
    list3 = [7, 8, 9]
    for i in product(list1,list2,list3):
        print(i)
    ‘‘‘
    (1, 4, 7)
    (1, 4, 8)
    (1, 4, 9)
    (1, 5, 7)
    (1, 5, 8)
    (1, 5, 9)
    (1, 6, 7)
    (1, 6, 8)
    (1, 6, 9)
    (2, 4, 7)
    (2, 4, 8)
    (2, 4, 9)
    (2, 5, 7)
    (2, 5, 8)
    (2, 5, 9)
    (2, 6, 7)
    (2, 6, 8)
    (2, 6, 9)
    (3, 4, 7)
    (3, 4, 8)
    (3, 4, 9)
    (3, 5, 7)
    (3, 5, 8)
    (3, 5, 9)
    (3, 6, 7)
    (3, 6, 8)
    (3, 6, 9)
    ‘‘‘

    #[list2]*3表示[list2,list2,list2]
    #最前面的*号表示将[list2,list2,list2]列表解析成独立的参数
    #也就是相当于入参是(list2,list2,list2)
    for i in product(*[list2]*3):
        print(i)
    ‘‘‘
    (4, 4, 4)
    (4, 4, 5)
    (4, 4, 6)
    (4, 5, 4)
    (4, 5, 5)
    (4, 5, 6)
    (4, 6, 4)
    (4, 6, 5)
    (4, 6, 6)
    (5, 4, 4)
    (5, 4, 5)
    (5, 4, 6)
    (5, 5, 4)
    (5, 5, 5)
    (5, 5, 6)
    (5, 6, 4)
    (5, 6, 5)
    (5, 6, 6)
    (6, 4, 4)
    (6, 4, 5)
    (6, 4, 6)
    (6, 5, 4)
    (6, 5, 5)
    (6, 5, 6)
    (6, 6, 4)
    (6, 6, 5)
    (6, 6, 6)

原文地址:https://www.cnblogs.com/xaiobong/p/10074732.html

时间: 2024-11-13 09:49:05

python中itertools里的product和permutation的相关文章

python中itertools模块zip_longest函数实现逻辑

最近在看流畅的python,在看第14章节的itertools模块,对其itertools中的相关函数实现的逻辑的实现 其中在zip_longest(it_obj1, ..., it_objN, fillvalue=None)时,其函数实现的功能和内置zip函数大致相同(实现一一对应), 不过内置的zip函数是已元素最少对象为基准,而zip_longest函数是已元素最多对象为基准,使用fillvalue的值来填充 以下是自己总结此函数的大致实现方法,和官方方法不同: 思路大致如此: 找出元素个

python中itertools模块介绍---03

product(*iterables[,repeat]): 源代码: def product(*args,**kwds):     pools=map(tuple,args)*kwds.get("repeat",1)     result=[[]]     for pool in pools:         result=[x+[y] for x in result for y in pool]     for prod in result:         yield tuple(

python中itertools模块介绍---01

itertools模块中包含了很多函数,这些函数最终都生成一个或多个迭代器,下面对这些函数进行介绍: 为了能够使用itertools中的函数,需要将该模块导入: >>>from itertools import * count(start=0,step=1): 源代码为: def count(start=0,step=1):     n=start     while True:         yield n         n+=step 从源代码可以看出,count函数产生一个生成

Python中Class里的__contains__(self,x)函数解析

网上搜了一些文章,有点绕. 在Class里添加__contains__(self,x)函数可以在类的实例化对象上进行 in 操作. 如下代码 class Graph(): def __init__(self): self.items = {'a':1,'b':2,'c':3} def __str__(self): return '打印我干嘛' def __contains__(self,x): # 判断一个定点是否包含在里面 return x in self.items a = Graph()

python中itertools模块介绍---02

chain(*iterables): 源代码: def chain(*iterables):     for it in iterables:         for element in it:             yield element chain函数接收多个参数(iterables),并且对iterables进行遍历,返回每个iterable中的元素.最终结果就像返回的所有元素均来自同一个单一的序列,例如: >>>a=chain('ab','cd') >>>

python中try里有return时,finally还执行不执行

写一个函数,在try里返回,最后在finnaly里打印语句,代码如下 def fun1(): x = 1 try: print('执行try') x = x + 1 # x = x / 0 # 执行次语句时,finally执行时,x的值依然是4 return print('执行try的return', x) except: print('异常') return x finally: x += 1 x += 1 print('finally执行:', x) 执行结果如下图所示: 由此可以看出,函数

函数式 Python 中的 Pipe 与 itertools

1.迭代器与管道函数式编程简介 可迭代器(iterable),不仅限于list/str等,还包括任何包含有yield关键字的函数,后者未必有规律的迭代特征.标准库中的itertools包提供了更加灵活的产生迭代器的工具,这些工具的输入大都是已有的迭代器函数的封装,并且itertools给出的函数都是针对广义迭代器而言.而len()等函数是针对狭义迭代器,即sequence(i.e. str, list, tuple)而言的. 以内置函数range()为例,执行结果会是一次性计算好整个序列.这对于

python中 Lambda,Map,Filter,Itertools,Generator高级函数的用法

Lambda 函数 Lambda 函数是一种比较小的匿名函数--匿名是指它实际上没有函数名. Python 函数通常使用 def a_function_name() 样式来定义,但对于 lambda 函数,我们根本没为它命名.这是因为 lambda 函数的功能是执行某种简单的表达式或运算,而无需完全定义函数. lambda 函数可以使用任意数量的参数,但表达式只能有一个. x = lambda a, b : a * b print(x(5, 6)) # prints '30' x = lambd

探寻Python中如何同时迭代多个iterable对象

题外话: 最近因为课程需要开始深入了解Python语言.因为以前一直用的Java.C++等强类型的静态语言,现在突然使用Python确实感受到了很大的不同. 直观感觉就是,在Python中总是能找到一些让代码变得精巧.简洁.高效.美观的写法,使得初学者在写代码的过程充满了惊喜,从而渐渐喜欢上Python.而且Python的官方手册阅读起来感觉非常好,很多问题都描述的很清楚.不过总体来说,还是觉得Java大法好:) Python中一个非常有用的语法就是for in循环跟iterable对象的结合,