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分割TXT文件成4K的TXT文件
May 23 Python
让python的Cookie.py模块支持冒号做key的方法
Dec 28 Python
wxPython事件驱动实例详解
Sep 28 Python
Python实现的多进程拷贝文件并显示百分比功能示例
Apr 09 Python
【python】matplotlib动态显示详解
Apr 11 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
python可视化篇之流式数据监控的实现
Aug 07 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
Jun 29 Python
Python pexpect模块及shell脚本except原理解析
Aug 03 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 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
UCenter Home二次开发指南
2009/05/28 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
PHP实现数组递归转义的方法
2014/08/28 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
php上传图片类及用法示例
2016/05/11 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
分享一个asp.net pager分页控件
2012/01/04 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
nodejs基础知识
2017/02/03 NodeJs
jquery实现焦点轮播效果
2017/02/23 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
[01:04:01]2014 DOTA2华西杯精英邀请赛5 24 DK VS VG
2014/05/25 DOTA
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
Python实现的微信好友数据分析功能示例
2018/06/21 Python
python——全排列数的生成方式
2020/02/26 Python
新浪网技术部笔试题
2016/08/26 面试题
解释下面关于J2EE的名词
2013/11/15 面试题
好的自荐信的要求
2013/10/30 职场文书
师范生自我鉴定
2014/03/20 职场文书
“九一八事变纪念日”国旗下讲话稿
2014/09/14 职场文书
1000字打架检讨书
2014/11/03 职场文书
投诉书格式范本
2015/07/02 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
2016年小学推普宣传周活动总结
2016/04/06 职场文书
实例详解Python的进程,线程和协程
2022/03/13 Python