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模拟登录百度贴吧(百度贴吧登录)实例
Dec 18 Python
使用Python设置tmpfs来加速项目的教程
Apr 17 Python
python九九乘法表的实例
Sep 26 Python
浅谈Python实现Apriori算法介绍
Dec 20 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
Feb 19 Python
python 协程 gevent原理与用法分析
Nov 22 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
Dec 04 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
Django model class Meta原理解析
Nov 14 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
Python利用socket模块开发简单的端口扫描工具的实现
Jan 27 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
joomla内置的表单验证功能使用方法
2010/06/11 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
PHP socket 模拟POST 请求实例代码
2016/07/18 PHP
PHP中如何判断exec函数执行成功?
2016/08/04 PHP
laravel中的一些简单实用功能
2018/11/03 PHP
javascript 验证日期的函数
2010/03/18 Javascript
基于jquery的跨域调用文件
2010/11/19 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍
2013/05/07 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
JavaScript Math 对象常用方法总结
2016/04/28 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
python中遍历文件的3个方法
2014/09/02 Python
用Python编写web API的教程
2015/04/30 Python
Python网络爬虫项目:内容提取器的定义
2016/10/25 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
商务英语求职信范文
2015/03/19 职场文书
中标通知书格式
2015/04/17 职场文书
千与千寻观后感
2015/06/04 职场文书
国际贸易实训总结
2015/08/03 职场文书
外出培训学习心得体会
2016/01/18 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
2016年推广普通话宣传周活动总结
2016/04/06 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android
Golang日志包的使用
2022/04/20 Golang
微信小程序 根据不同用户切换不同TabBar
2022/04/21 Javascript
Java 定时任务技术趋势简介
2022/05/04 Java/Android