Python编程使用*解包和itertools.product()求笛卡尔积的方法


Posted in Python onDecember 18, 2017

本文实例讲述了Python编程使用*解包和itertools.product()求笛卡尔积的方法。分享给大家供大家参考,具体如下:

【问题】

目前有一字符串s = "['a', 'b'],['c', 'd']",想把它分开成为两个列表:

list1 = ['a', 'b']
list2 = ['c', 'd']

之后使用itertools.product()求笛卡尔积,应该写成:

for i in itertools.product(list1, list2):
  print i

结果为:

('a', 'c')
('a', 'd')
('b', 'c')
('b', 'd')

然而使用eval(s)获得的是一个元组。product的参数如果是元组则一定会报错(product的参数是两个列表,每个列表中的元素数量不定)。怎么破?

【解答】

其实只差一个*而已。*是python中一个赋值的技巧,叫做解包。相信很多人都见过def func(*args, **kwargs)这种写法,在函数中,*代表不定个数的参数,以tuple的方式传入,**则是以dict的方式。在使用函数的时候,也可以有类似的方法,调用func(*args)函数时,相当于把一个元组args拆开,当成参数传进函数中。只是这样做要小心的是,args中含有的元素数量及类型必须跟该函数定义一致,否则会报SyntaxError: invalid syntax语法错误。

例如,在这道题中,就可以写成:

for i in itertools.product(*eval(s)):
  print i

就可以出来结果了。

这个问题用到的三个技巧:

(1)itertools.product()求笛卡尔积。itertools这个模块中有相当多的牛逼闪闪的数学算法,比如全排列函数permutations,组合函数combinations等等,有时候想要一个数学类的函数又不想自己写,可以在这里找找,没准有惊喜。

(2)eval()字符串求值。eval和exec这两个python中的逆天函数,强大到让人不太放心其安全性。

(3)*解包。上面已经解释过了,其实用到的场合感觉挺有限的,有印象即可,能在无路可走的时候灵光一现就好,别太指望它给你的程序带来多大好处。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python进阶教程之词典、字典、dict
Aug 29 Python
python网络编程之读取网站根目录实例
Sep 30 Python
基于Python代码编辑器的选用(详解)
Sep 13 Python
Python字符编码与函数的基本使用方法
Sep 30 Python
python3.x上post发送json数据
Mar 04 Python
python使用rpc框架gRPC的方法
Aug 24 Python
python引入不同文件夹下的自定义模块方法
Oct 27 Python
Python 多维List创建的问题小结
Jan 18 Python
python图像处理入门(一)
Apr 04 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
May 10 Python
如何基于python测量代码运行时间
Dec 25 Python
Python生成器next方法和send方法区别详解
May 30 Python
通过Python 获取Android设备信息的轻量级框架
Dec 18 #Python
python中列表和元组的区别
Dec 18 #Python
Django REST为文件属性输出完整URL的方法
Dec 18 #Python
Python3计算三角形的面积代码
Dec 18 #Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 #Python
python 3.5实现检测路由器流量并写入txt的方法实例
Dec 17 #Python
python中闭包Closure函数作为返回值的方法示例
Dec 17 #Python
You might like
修改php.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
PHP 循环列出目录内容的函数代码
2010/05/26 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
PHP对象相关知识总结
2017/04/09 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
2019/06/14 PHP
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
ES6解构赋值实例详解
2017/10/31 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
在微信小程序中使用图表的方法示例
2019/04/25 Javascript
vue实现抖音时间转盘
2019/09/08 Javascript
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
彻底理解Python list切片原理
2017/10/27 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
详解Python如何生成词云的方法
2018/06/01 Python
python实现猜数字小游戏
2020/03/24 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
2013/01/31 HTML / CSS
Bjorn Borg官方网上商店:国际运动时尚品牌
2016/08/27 全球购物
创业计划书模版
2014/02/05 职场文书
青年文明号服务承诺
2014/03/31 职场文书
小学竞选班长演讲稿
2014/09/09 职场文书
个人公司授权委托书范本
2014/10/12 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
大学生英文求职信范文
2015/03/19 职场文书
人工作失职检讨书
2015/05/05 职场文书
竞聘书的秘诀
2019/04/02 职场文书