Python itertools.product方法代码实例

itertools.product:类似于求多个可迭代对象的笛卡尔积。

使用的形式是:

itertools.product(*iterables, repeat=1),

product(X, repeat=3)等价于product(X, X, X)。

1. 直接使用时:分别生成元组,然后合成一个list

import itertools
aa = itertools.product(['西藏','瀑布','湖水'], ['月色','星空'])
bb = list(aa)  #按照顺序生成笛卡尔积,repeat默认是1
print(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 random
random.seed(1)  #设置随机数种子,可用来检测相同的随机数得到的结果是否一致
n = 2
aa = 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 = 2
aa = random.sample(random_list, n)  #随机列表中的n个元素
print(aa)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python中的itertools的使用详解

    今天了解了下python中内置模块itertools的使用,熟悉下,看能不能以后少写几个for,嘿嘿

  • Python标准库itertools的使用方法

    Python标准库itertools模块介绍 itertools是python内置的模块,使用简单且功能强大,这里尝试汇总整理下,并提供简单应用示例:如果还不能满足你的要求,欢迎加入补充. 使用Python标准库itertools只需简单一句导入:import itertools chain() 与其名称意义一样,给它一个列表如 lists/tuples/iterables,链接在一起:返回iterables对象. letters = ['a', 'b', 'c', 'd', 'e', 'f']

  • 详解Python中的分组函数groupby和itertools)

    具体代码如下所示: from operator import itemgetter #itemgetter用来去dict中的key,省去了使用lambda函数 from itertools import groupby #itertool还包含有其他很多函数,比如将多个list联合起来.. d1={'name':'zhangsan','age':20,'country':'China'} d2={'name':'wangwu','age':19,'country':'USA'} d3={'nam

  • Python itertools模块详解

    这货很强大, 必须掌握 文档 链接 http://docs.python.org/2/library/itertools.html pymotw 链接 http://pymotw.com/2/itertools/ 基本是基于文档的翻译和补充,相当于翻译了 itertools用于高效循环的迭代函数集合 组成 总体,整体了解 无限迭代器 复制代码 代码如下: 迭代器         参数         结果                                              

  • Python标准库之itertools库的使用方法

    前言 因为最近事情不是很多,想写一些技术文章分享给大家,同时也对自己一段时间来碎片化接受的知识进行一下梳理,所谓写清楚才能说清楚,说清楚才能想清楚,就是这个道理了. 很多人都致力于把Python代码写得更Pythonic,一来更符合规范且容易阅读,二来一般Pythonic的代码在执行上也更有效率.今天就先给大家介绍一下Python的系统库itertools.下面话不多说了,来一起看看详细的介绍吧. itertools库 迭代器(生成器)在Python中是一种很常用也很好用的数据结构,比起列表(l

  • python利用itertools生成密码字典并多线程撞库破解rar密码

    脚本功能: 利用itertools生成密码字典(迭代器形式) 多线程并发从密码字典中取出密码进行验证 验证成功后把密码写入文件中保存 #!/usr/bin/env python # -*- coding: UTF-8 -*- # Author:Leslie-x import itertools as its import threading import rarfile import os words = '0123456789abcdefghijklmnopqrstuvwxyz' # 涉及到生

  • Python转换itertools.chain对象为数组的方法

    之前做1月总结的时候说过希望每天或者每2天开始的更新一些学习笔记,这是开始的第一篇. 这篇介绍的是如何把一个 itertools.chain 对象转换为一个数组. 参考 stackoverflow 上的一个回答:Get an array back from an itertools.chain object,链接如下: https://stackoverflow.com/questions/26853860/get-an-array-back-from-an-itertools-chain-ob

  • Python中itertools的用法详解

    iterator 循环器(iterator)是对象的容器,包含有多个对象.通过调用循环器的next()方法 (next()方法,在Python 3.x中),循环器将依次返回一个对象.直到所有的对象遍历穷尽,循环器将举出StopIteration错误. 在for i in iterator结构中,循环器每次返回的对象将赋予给i,直到循环结束.使用iter()内置函数,我们可以将诸如表.字典等容器变为循环器.比如 for i in iter([2, 4, 5, 6]): print i 标准库中的i

  • Python itertools.product方法代码实例

    itertools.product:类似于求多个可迭代对象的笛卡尔积. 使用的形式是: itertools.product(*iterables, repeat=1), product(X, repeat=3)等价于product(X, X, X). 1. 直接使用时:分别生成元组,然后合成一个list import itertools aa = itertools.product(['西藏','瀑布','湖水'], ['月色','星空']) bb = list(aa) #按照顺序生成笛卡尔积,

  • Python csv模块使用方法代码实例

    这篇文章主要介绍了Python csv模块使用方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 import csv def openSCV(filename): with open("renting.csv",'r',encoding = 'utf_8_sig') as f: f_csv = csv.reader(f) for row in f_csv: print(row) def Test1(): headers =

  • python各层级目录下import方法代码实例

    这篇文章主要介绍了python各层级目录下import方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 以前经常使用python2.现在很多东西都切换到了python3,发现很多东西还是存在一些差异化的.跨目录import是常用的一种方法,并且有不同的表现形式,新手很容易搞混.有必要这里做个总结,给大家科普一下: 1 同级目录下的调用: 同级目录下的调用比较简单,一般使用场景是不同类的相互调用.不用考虑路径问题,常用的格式是:from

  • Python class的继承方法代码实例

    这篇文章主要介绍了Python class的继承方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 class parent(object): def implicit(self): print("Parent implicit()") def override(self): print("Parent override()") def altered(self): print("Parent a

  • python实现杨辉三角的几种方法代码实例

    方法一:迭代 def triangle_1(x): """ :param x: 需要生成的杨辉三角行数 :return: """ triangle = [[1], [1, 1]] # 初始化杨辉三角 n = 3 # 从第三行开始计数,逐行添加 while n <= x: for i in range(0, n-1): if i == 0: # 添加初始列表[1,1],杨辉三角每行的首位和末位必为1 triangle.append([1, 1

  • Python实现元素等待代码实例

    这篇文章主要介绍了python实现元素等待代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.为什么要元素等待? 在UI自动化过程中,元素的出现受网络环境.设备性能等多种元素影响.因此,元素加载和脚本运行到该元素的时间不一致,会报错:元素无法定位. 简单举下例子:实际UI自动化测试中,点击一个登录控件需要启动一个新activity界面,或需要加载弹框,或请求网络加载数据成功后刷新页面,此时需要等待一段时间,新界面出现了才能继续执行UI操

  • 简单了解Python读取大文件代码实例

    这篇文章主要介绍了简单了解Python读取大文件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通常对于大文件读取及处理,不可能直接加载到内存中,因此进行分批次小量读取及处理 I.第一种读取方式 一行一行的读取,速度较慢 def read_line(path): with open(path, 'r', encoding='utf-8') as fout: line = fout.readline() while line: line

  • python烟花效果的代码实例

    天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花,工作之余也可以随时让程序为自己放一场烟花秀. 这个有趣的小项目并不复杂,只需一点可视化技巧,100余行Python代码和程序库Tkinter,最后我们就能达到下面这个效果: 学完本教程后,你也能做出这样的烟花秀. 整体概念梳理 我们的整个理念比较简单. 如上图示,我们这里通过让画面上一个粒子分裂为X数量的粒子来模拟爆炸效果.粒子会发生"膨胀",意思是它们会以恒速移动且相互之间的角度相等.

  • 10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例

    本文主要涉及python爬虫知识点: web是如何交互的 requests库的get.post函数的应用 response对象的相关函数,属性 python文件的打开,保存 代码中给出了注释,并且可以直接运行哦 如何安装requests库(安装好python的朋友可以直接参考,没有的,建议先装一哈python环境) windows用户,Linux用户几乎一样: 打开cmd输入以下命令即可,如果python的环境在C盘的目录,会提示权限不够,只需以管理员方式运行cmd窗口 pip install

  • python绘制条形图方法代码详解

    1.首先要绘制一个简单的条形图 import numpy as np import matplotlib.pyplot as plt from matplotlib import mlab from matplotlib import rcParams fig1 = plt.figure(2) rects =plt.bar(left = (0.2,1),height = (1,0.5),width = 0.2,align="center",yerr=0.000001) plt.titl

随机推荐