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更新列表的方法
Jul 28 Python
Python将图片批量从png格式转换至WebP格式
Aug 22 Python
快速查询Python文档方法分享
Dec 27 Python
Python中函数参数调用方式分析
Aug 09 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
Dec 05 Python
python使用thrift教程的方法示例
Mar 21 Python
python str字符串转uuid实例
Mar 03 Python
如何查看Django ORM执行的SQL语句的实现
Apr 20 Python
Django 解决distinct无法去除重复数据的问题
May 20 Python
Python正则表达式如何匹配中文
May 27 Python
在python3.64中安装pyinstaller库的方法步骤
Jun 02 Python
Python关于OS文件目录处理的实例分享
May 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 if 想到的些问题
2008/03/22 PHP
PHPEXCEL 使用小记
2013/01/06 PHP
CodeIgniter基本配置详细介绍
2013/11/12 PHP
php简单统计字符串单词数量的方法
2015/06/19 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
js substr支持中文截取函数代码(中文是双字节)
2013/04/17 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
JS+CSS实现简易的滑动门效果代码
2015/09/24 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
2016/06/21 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
python每次处理固定个数的字符的方法总结
2013/01/29 Python
利用信号如何监控Django模型对象字段值的变化详解
2017/11/27 Python
wxpython绘制音频效果
2019/11/18 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
python numpy库np.percentile用法说明
2020/06/08 Python
python中id函数运行方式
2020/07/03 Python
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
莫斯科绝对前卫最秘密的商店:SVMoscow
2017/10/23 全球购物
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
2014年新生军训方案
2014/05/01 职场文书
篮球比赛策划方案
2014/06/05 职场文书
白莲教口号
2014/06/18 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
班主任高考寄语
2015/02/26 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python