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 import用法以及与from...import的区别
May 28 Python
在Django的视图中使用form对象的方法
Jul 18 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
python实现自动发送邮件
Jun 20 Python
Python docx库用法示例分析
Feb 16 Python
在Python文件中指定Python解释器的方法
Feb 18 Python
Python Django 页面上展示固定的页码数实现代码
Aug 21 Python
flask框架渲染Jinja模板与传入模板变量操作详解
Jan 25 Python
python实现读取类别频数数据画水平条形图案例
Apr 24 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
Jun 27 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
Python函数__new__及__init__作用及区别解析
Aug 31 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脚本数据库功能详解(上)
2006/10/09 PHP
PHP4实际应用经验篇(4)
2006/10/09 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
php过滤html标记属性类用法实例
2014/09/23 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
ext读取两种结构的xml的代码
2008/11/05 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
js实现将json数组显示前台table中
2017/01/10 Javascript
Laravel整合Bootstrap 4的完整方案(推荐)
2018/01/25 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
2020/06/29 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
解决python中 f.write写入中文出错的问题
2018/10/31 Python
python 格式化输出百分号的方法
2019/01/20 Python
Python发展简史 Python来历
2019/05/14 Python
Python中join()函数多种操作代码实例
2020/01/13 Python
Python urllib3软件包的使用说明
2020/11/18 Python
利用python进行文件操作
2020/12/04 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
领导班子个人对照检查剖析材料
2014/09/29 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
学校捐书倡议书
2015/04/27 职场文书
汽车车尾标语大全
2015/08/11 职场文书
幼儿园小班教学反思
2016/03/03 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
Java并发编程必备之Future机制
2021/06/30 Java/Android