源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-12-17 12:38 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Python编程使用*解包和itertools.product()求笛卡尔积的方法
本文实例讲述了Python编程使用*解包和[code]itertools.product()[/code]求笛卡尔积的方法。分享给大家供大家参考,具体如下: [b]【问题】[/b] 目前有一字符串[code]s = "['a', 'b'],['c', 'd']"[/code],想把它分开成为两个列表:
list1 = ['a', 'b']
list2 = ['c', 'd']

之后使用[code]itertools.product()[/code]求笛卡尔积,应该写成:
for i in itertools.product(list1, list2):
  print i

结果为:
('a', 'c')
('a', 'd')
('b', 'c')
('b', 'd')

然而使用eval(s)获得的是一个元组。product的参数如果是元组则一定会报错(product的参数是两个列表,每个列表中的元素数量不定)。怎么破? [b]【解答】[/b] 其实只差一个*而已。*是python中一个赋值的技巧,叫做解包。相信很多人都见过[code]def func(*args, **kwargs)[/code]这种写法,在函数中,*代表不定个数的参数,以tuple的方式传入,**则是以dict的方式。在使用函数的时候,也可以有类似的方法,调用func(*args)函数时,相当于把一个元组args拆开,当成参数传进函数中。只是这样做要小心的是,args中含有的元素数量及类型必须跟该函数定义一致,否则会报SyntaxError: invalid syntax语法错误。 例如,在这道题中,就可以写成:
for i in itertools.product(*eval(s)):
  print i

就可以出来结果了。 [b]这个问题用到的三个技巧:[/b] (1)[code]itertools.product()[/code]求笛卡尔积。itertools这个模块中有相当多的牛逼闪闪的数学算法,比如全排列函数permutations,组合函数combinations等等,有时候想要一个数学类的函数又不想自己写,可以在这里找找,没准有惊喜。 (2)[code]eval()[/code]字符串求值。eval和exec这两个python中的逆天函数,强大到让人不太放心其安全性。 (3)*解包。上面已经解释过了,其实用到的场合感觉挺有限的,有印象即可,能在无路可走的时候灵光一现就好,别太指望它给你的程序带来多大好处。 更多关于Python相关内容感兴趣的读者可查看本站专题:《[url=http://www.1sucai.cn/Special/663.htm]Python数据结构与算法教程[/url]》、《[url=http://www.1sucai.cn/Special/946.htm]Python加密解密算法与技巧总结[/url]》、《[url=http://www.1sucai.cn/Special/788.htm]Python编码操作技巧总结[/url]》、《[url=http://www.1sucai.cn/Special/642.htm]Python函数使用技巧总结[/url]》、《[url=http://www.1sucai.cn/Special/636.htm]Python字符串操作技巧汇总[/url]》及《[url=http://www.1sucai.cn/Special/520.htm]Python入门与进阶经典教程[/url]》 希望本文所述对大家Python程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部