leetcode上做提示时候看到有高人用这个方法解题

【问题】
目前有一字符串s = "['a', 'b'],['c', 'd']",想把它分开成为两个列表:
list1 = ['a', 'b'] list2 = ['c', 'd']

之后使用itertools.product()求笛卡尔积,应该写成:
1 for i in itertools.product(list1, list2):
2     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语法错误。
例如,在这道题中,就可以写成:
1 for i in itertools.product(*eval(s)):
2     print i

就可以出来结果了。
这个问题用到的三个技巧:
(1)itertools.product()求笛卡尔积。itertools这个模块中有相当多的牛逼闪闪的数学算法,比如全排列函数permutations,组合函数combinations等等,有时候想要一个数学类的函数又不想自己写,可以在这里找找,没准有惊喜。
(2)eval()字符串求值。eval和exec这两个python中的逆天函数,强大到让人不太放心其安全性。
(3)*解包。上面已经解释过了,其实用到的场合感觉挺有限的,有印象即可,能在无路可走的时候灵光一现就好,别太指望它给你的程序带来多大好处。
=============================分割线========================
试验了下,加*的效果就是让列表内部的元素作为参数,不加就是单个列表是一个参数
list1 = ['ac', 'b']
for i in itertools.product(list1):print(i)
>>>
('ac',)
('b',)list1 = ['ac', 'b']
for i in itertools.product(*list1):print(i)
>>>
('a', 'b')
('c', 'b')list1 = [['a', 'b'],'12']
for i in itertools.product(*list1):print(i)
>>>
('a', '1')
('a', '2')
('b', '1')
('b', '2')

转载于:https://www.cnblogs.com/xiaojinniu425/p/9462966.html

Python小技巧:使用*解包和itertools.product()求笛卡尔积(转)相关推荐

  1. python解包操作_Python编程使用*解包和itertools.product()求笛卡尔积的方法

    本文实例讲述了Python编程使用*解包和itertools.product()求笛卡尔积的方法.分享给大家供大家参考,具体如下: [问题] 目前有一字符串s = "['a', 'b'],[ ...

  2. 收藏喜+1!值得使用的100个Python小技巧

    目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手. 你可以用它来完成很多任务,比如数据科学.机器学习.Web开发.脚本编写.自动化等 ...

  3. 快收藏!整理了 100 个 Python 小技巧

    作者:小F 来源: 法纳斯特 目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手. 你可以用它来完成很多任务,比如数据科学.机器学习. ...

  4. 不藏了!分享100个Python小技巧!!

    目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手. 你可以用它来完成很多任务,比如数据科学.机器学习.Web开发.脚本编写.自动化等 ...

  5. 100个Python小技巧!帮你节省很多头发

    目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手.你可以用它来完成很多任务,比如数据科学.机器学习.Web开发.脚本编写.自动化等. ...

  6. 整理了100个Python小技巧(超级实用)

    目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手.你可以用它来完成很多任务,比如数据科学.机器学习.Web开发.脚本编写.自动化等. ...

  7. 快收藏!!整理了100个Python小技巧!!

    大家好,我是小F- 目前Python可以说是非常流行,在目前的编程语言中,Python的抽象程度是最高的,是最接近自然语言的,很容易上手. 你可以用它来完成很多任务,比如数据科学.机器学习.Web开发 ...

  8. python hist函数_虎哥的python小技巧放送之绘制统计图(2)

    先放出第一期让大家回顾一下上次的内容 虎哥的python小技巧放送之绘制统计图(1) 第一期主要给大家讲了一些图形设置的东西.这一次开始正式带大家画图~ 折线图:折线图可以通过matplotlib中的 ...

  9. 3分钟学会python_3分钟学会一个Python小技巧

    Python时间日期转换在开发中是非常高频的一个操作,你经常会遇到需要将字符串转换成 datetime 或者是反过来将 datetime 转换成字符串. datetime 分别提供了两个方法 strp ...

最新文章

  1. python实现人脸识别抓取人脸并做成熊猫头表情包(2)之优化
  2. vue更新数组和对象
  3. 原来在UNITY中使用system.io下的所有函数都可以用相对路径 : Assets/xx
  4. [vue] vue在开发过程中要同时跟N个不同的后端人员联调接口(请求的url不一样)时你该怎么办?
  5. 从蚂蚁金服实践入手,带你深入了解 Service Mesh
  6. adb-获取包名/界面名、获取app启动时间、卸载app、退出app、查看所有进程
  7. 【GBK、UTF-8、ISO8859-1】三种编码方式总结及实例
  8. Runnable Thread分析比较
  9. Android系统Recovery工作原理之使用update.zip升级过程分析(四)
  10. Oracle数据库执行Sql脚本
  11. 达观数据推出智能审单机器人,全面提升航运物流效率
  12. Python面向对象加强3.面向对象中的索引,切片,比较操作以及上下文布尔值
  13. APP性能测试——启动时间
  14. sqlserver和mysql定时同步_通过作业,定时同步两个数据库_sqlserver
  15. 最佳37个获取LOGO设计灵感的网站推荐
  16. 腾讯云Ubuntu建FTP心得
  17. Java多线程,Android多线程
  18. CentOS 7 的安装教程
  19. python 图表_测试多图表展示Python版
  20. JavaScript 教程「3」:数据类型

热门文章

  1. 复习 2 个月拿下大厂 Offer,Java 面试指南带你通关跳槽季
  2. .net测试学习--理解.net测试选项
  3. opencv图片分类+特征图片截取
  4. MySQL------如何将SQLServer文件数据迁移到MySQL
  5. 回顾Swift 3,展望Swift 4
  6. 腾讯云服务器配置ftp~
  7. [转]Unity3D新手引导开发手记
  8. webassembly_提升WebAssembly的安全性
  9. ad交互式布线如何改变走向_走向开放:如何改变思维和工作方式
  10. java 情侣最佳升高_2016年最佳情侣:显示经理和窗口经理