python列表推导式及其简单应用

列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表

一个简单平方

普通for循环

for i in range(1,5):
    print(i*i,end='')

列表推导式

res = [x*x for x in range(1,5)]
print(res)
执行顺序
[x*y for x in range(1,5) if x > 2 for y in range(1,4) if y < 3]

等价于

for x in range(1,5):
    if x > 2:
        for y in range(1,4):
            if y < 3:
                return x*y
leetcode17电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

这题看起来递归比较合适,但是强行循环也不是不可以

class Solution:
    def letterCombinations(self, digits):
        m = {
            '2': list('abc'),
            '3': list('def'),
            '4': list('ghi'),
            '5': list('jkl'),
            '6': list('mno'),
            '7': list('pqrs'),
            '8': list('tuv'),
            '9': list('wxyz'),
            }
        if not digits:
            return []
        res = ['']
        for i in digits:
            res = [x + y for x in res for y in m[i]]
        return res

这里的循环其实不止两层,取决于你输入的数字的位数。可以打印输出看一下,假设输入的数字是234

['a', 'b', 'c']
['ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf']
['adg', 'adh', 'adi', 'aeg', 'aeh', 'aei', 'afg', 'afh', 'afi', 'bdg', 'bdh', 'bdi', 'beg', 'beh', 'bei', 'bfg', 'bfh', 'bfi', 'cdg', 'cdh', 'cdi', 'ceg', 'ceh', 'cei', 'cfg', 'cfh', 'cfi']

第一个2对应的字母是[‘a’, ‘b’, ‘c’]
第二个3对于的字母是[‘d’, ‘e’, ‘f’]
第三个4对于的字母是[‘g’, ‘h’, ‘i’]
开始的时候res长度为1,可以理解为

res = ['']
m = ['a', 'b', 'c']
for x in res:
    tem = []
    for y in m:
        res = x + y
        tem.append(res)
    print(tem)

当有两个数字时

res = ['']
m = ['a', 'b', 'c']
n = ['d', 'e', 'f']
tem = []
for x in res:
    for y in m:
        for k in n:
            res = x + y + k
            tem.append(res)
    print(tem)

这样一层一层加下去就可以,不过即使知道要循环几次,也很难表达出来,这个时候用列表推导式就很方便

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值