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中for循环的使用方法
May 14 Python
python统计日志ip访问数的方法
Jul 06 Python
Python元组及文件核心对象类型详解
Feb 11 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
pymongo中group by的操作方法教程
Mar 22 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
python 实现提取log文件中的关键句子,并进行统计分析
Dec 24 Python
如何学习Python time模块
Jun 03 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 Python
python的json包位置及用法总结
Jun 21 Python
Python实现手势识别
Oct 21 Python
安装pyinstaller遇到的各种问题(小结)
Nov 20 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
探讨:parse url解析URL,返回其组成部分
2013/06/14 PHP
php读取文件内容的三种可行方法示例介绍
2014/02/08 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
PHP单文件上传原理及上传函数的封装操作示例
2019/09/02 PHP
小议Javascript中的this指针
2010/03/18 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
js中日期的加减法
2015/05/06 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
nodejs入门教程一:概念与用法简介
2017/04/24 NodeJs
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
Vue组件中prop属性使用说明实例代码详解
2018/05/31 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
Python实现程序的单一实例用法分析
2015/06/03 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
python numpy 矩阵堆叠实例
2020/01/17 Python
python opencv进行图像拼接
2020/03/27 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
职工运动会感言
2014/02/07 职场文书
生日寄语大全
2014/04/08 职场文书
村党支部公开承诺书
2014/05/29 职场文书
计算机求职信
2014/07/02 职场文书
创先争优宣传标语
2014/10/08 职场文书
庆六一宣传标语
2014/10/08 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
教师学期末个人总结
2015/02/13 职场文书
党支部审查意见
2015/06/02 职场文书
儿童诗两首教学反思
2016/02/23 职场文书
七年级话题作文之执着
2019/11/19 职场文书
python3读取文件指定行的三种方法
2021/05/24 Python
基于Python编写一个监控CPU的应用系统
2022/06/25 Python