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装饰器使用实例:验证参数合法性
Jun 24 Python
python实现DES加密解密方法实例详解
Jun 30 Python
浅谈机器学习需要的了解的十大算法
Dec 15 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
Python Json数据文件操作原理解析
May 09 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
May 26 Python
Django CBV模型源码运行流程详解
Aug 17 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
Oct 29 Python
Python快速优雅的批量修改Word文档样式
May 20 Python
教你如何用Python实现人脸识别(含源代码)
Jun 23 Python
浅谈哪个Python库才最适合做数据可视化
Jun 28 Python
python解析照片拍摄时间进行图片整理
Jul 23 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设计模式 Command(命令模式)
2011/06/26 PHP
php查找字符串出现次数的方法
2014/12/01 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
PHP 获取ip地址代码汇总
2015/07/05 PHP
php基于Snoopy解析网页html的方法
2015/07/09 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
HTML Table 空白单元格补全的简单实现
2016/10/13 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
2020/08/10 Javascript
跟老齐学Python之dict()的操作方法
2014/09/24 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
在python中bool函数的取值方法
2018/11/01 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
2020/04/01 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
CSS3轻松实现圆角效果
2017/11/09 HTML / CSS
浅析图片上传及canvas压缩的流程
2020/06/10 HTML / CSS
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
《燕子专列》教学反思
2014/02/21 职场文书
工程力学专业自荐信范文
2014/03/17 职场文书
史学专业毕业生求职信
2014/05/09 职场文书
孩子教育的心得体会
2014/09/01 职场文书
详解Nginx 工作原理
2021/03/31 Servers