电话号码的字母组合及其引申出的笛卡尔积和解包操作
创始人
2024-05-02 12:32:40
0

这是leecode的第17题,代码如下:

class Solution:dt = {'2':'abc', '3':'def', '4':'ghi', '5':'jkl', '6':'mno', '7':'pqrs', '8':'tuv', '9':'wxyz'}def letterCombinations(self, digits: str) -> list:if len(digits) == 0:return []from itertools import productchars = [self.dt[i] for i in digits]return [''.join(i) for i in product(*chars)]

代码没啥好说的,代码中的pythonic的操作可以好好说说。

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 星号 * 解包技巧

其实只差一个 * 而已。* 是 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() 字符串求值。evalexec 这两个 Python 中的逆天函数,强大到让人不太放心其安全性。
  3. * 解包。上面已经解释过了,其实用到的场合感觉挺有限的,有印象即可,能在无路可走的时候灵光一现就好,别太指望它给你的程序带来多大好处。

参考

https://oldtang.com/6992.html

https://blog.csdn.net/qdPython/article/details/110085701

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...