Python编程使用*解包和itertools.product()求笛卡尔积的方法

 更新时间:2017年12月18日 12:02:33   作者:_小苹果  
这篇文章主要介绍了Python编程使用*解包和itertools.product()求笛卡尔积的方法,涉及Python列表转换及itertools.product()求笛卡尔积相关操作技巧,需要的朋友可以参考下

本文实例讲述了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加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • Python While循环语句实例演示及原理解析

    Python While循环语句实例演示及原理解析

    这篇文章主要介绍了Python While循环语句实例演示及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • python 多种日期时间处理函数实例详解

    python 多种日期时间处理函数实例详解

    Python提供了丰富的日期和时间处理函数,可以帮助你轻松地解析、格式化、计算和操作日期和时间,在实际应用中,根据具体需求选择合适的函数,可以提高工作效率并简化代码,本文给大家介绍python多种日期时间处理函数介绍,感兴趣的朋友一起看看吧
    2024-03-03
  • python数据提取BeautifulSoup的概念语法及使用优点详解

    python数据提取BeautifulSoup的概念语法及使用优点详解

    这篇文章主要为大家介绍了python数据提取BeautifulSoup概念语法及使用优点详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-02-02
  • python字符串编码识别模块chardet简单应用

    python字符串编码识别模块chardet简单应用

    有时候需要先检测一个文件的编码,然后将其转化为另一种编码。这时候就会用到chardet(chardet是python的一个第三方库,是非常优秀的编码识别模块)
    2015-06-06
  • Pytorch模型迁移和迁移学习,导入部分模型参数的操作

    Pytorch模型迁移和迁移学习,导入部分模型参数的操作

    这篇文章主要介绍了Pytorch模型迁移和迁移学习,导入部分模型参数的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 理解深度学习之深度学习简介

    理解深度学习之深度学习简介

    这篇文章主要是关于深度学习的简介,对大家学习了解机器深度学习有一定的帮助,以后会持续更新本系列,希望能为大家带来一些收货,让我们一起来看看下面的文章吧
    2021-04-04
  • 深入讲解Python编程中的字符串

    深入讲解Python编程中的字符串

    这篇文章主要介绍了Python编程中的字符串,包括字符串的格式化与三引号的使用等,需要的朋友可以参考下
    2015-10-10
  • 在echarts中图例legend和坐标系grid实现左右布局实例

    在echarts中图例legend和坐标系grid实现左右布局实例

    这篇文章主要介绍了在echarts中图例legend和坐标系grid实现左右布局实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python基于回溯法子集树模板解决数字组合问题实例

    Python基于回溯法子集树模板解决数字组合问题实例

    这篇文章主要介绍了Python基于回溯法子集树模板解决数字组合问题,简单描述了数字组合问题并结合实例形式分析了Python回溯法子集树模板解决数字组合问题的具体步骤与相关操作技巧,需要的朋友可以参考下
    2017-09-09
  • django orm模糊查询、正则匹配多个值方式

    django orm模糊查询、正则匹配多个值方式

    这篇文章主要介绍了django orm模糊查询、正则匹配多个值方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论