时间:2021-05-22
itertools.product:类似于求多个可迭代对象的笛卡尔积。
使用的形式是:
itertools.product(*iterables, repeat=1),
product(X, repeat=3)等价于product(X, X, X)。
1. 直接使用时:分别生成元组,然后合成一个list
import itertoolsaa = itertools.product(['西藏','瀑布','湖水'], ['月色','星空'])bb = list(aa) #按照顺序生成笛卡尔积,repeat默认是1print(bb)2. 假设设置:repeat=3
random_list = list(itertools.product(['西藏','瀑布','湖水'], ['月色','星空'], repeat=3))print(random_list) #此list长度为216为什么会是216呢?
首先,在不设置 repeat 参数的时候,默认是1,生成的list长度时6 —— 这可以用数学的排列组合来表示,从第一个参数['西藏','瀑布','湖水']取出一个值,有3种可能;从第二个参数['月色','星空']取出一个值,有2种可能;故 3*2=6种结果。
然后,当设置 repeat=3 时,也就是说将 repeat=1(默认)的结果再重复2次后(也就是最后一共有3套一样的第一层结果)再进行排列组合,从第一个结果(6种结果)取出一个元素的可能有6种,同理,从第二第三个重复结果中取出一个元素的可能各有6种,于是它们的组合就有6*6*6=216种。
当然,也是先合成一个元组再组成list的。
3. 所以也能理解下面的结果是27种了吧
random_list = list(itertools.product(['西藏','瀑布','湖水'], repeat=3))print(random_list)因为第一层结果是3种可能;执行该操作3次,就形成了第一层的3套一样的结果(每个结果各有3种可能),然后再排列组合就是 3*3*3=27种结果。
4. 如果要从列表中随机取出几个不重复的元素的话(原来的列表本身元素不重复),可用 random.sample 方法。
import randomrandom.seed(1) #设置随机数种子,可用来检测相同的随机数得到的结果是否一致n = 2aa = random.sample(random_list, n) #随机列表中的n个元素print(aa)也就是从上述27种结果中,随机取出2种,得到:
5. 此方法可以用于生成随机的坐标
random_list = list(itertools.product(range(1,4), range(1,2)))print(random_list)n = 2aa = random.sample(random_list, n) #随机列表中的n个元素print(aa)以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Python使用itertools模块实现排列组合功能。分享给大家供大家参考,具体如下:一、笛卡尔积:itertools.product(*ite
使用python自带的itertools模块调用其product函数传入我们想组合生成的字符数据便会源源不断的生成组合而且不会重复repeat参数指定生成多少位
本文实例讲述了python实现在无须过多援引的情况下创建字典的方法。分享给大家供大家参考。具体实现方法如下:1.使用itertools模块importitert
Python标准库itertools模块介绍itertools是python内置的模块,使用简单且功能强大,这里尝试汇总整理下,并提供简单应用示例;如果还不能满
最近在看流畅的python,在看第14章节的itertools模块,对其itertools中的相关函数实现的逻辑的实现其中在zip_longest(it_obj