列表推导式总结

本文介绍了一种使用Python去除嵌套列表的方法,并通过递归函数实现列表的扁平化处理。此外,还详细讲解了列表推导式的使用技巧,包括基本用法及高级应用。

list1 = [11, [22, 3], [4, ], [55, 66], 8, [9, [7, [12, [34, [26]]]]]]

如这个list 如何将这些中括号去掉

去括号,要知道一句话字符串操作要比类型操作容易。

所以我的第一反应是

li = str(list1).replace('[', '').replace(']', '').split(',')
print([int(i.strip()) for i in li])

皮这一下就是很快乐,反正达到要求了 不是么~

正经的使用递归函数处理

def func(li, l2=[]):
    for i in li:
        if isinstance(i, list):
            func(i)
        else:
            l2.append(i)
    return l2


print(func(list1))

中规中矩的一个递归函数 先判断是否是列表,是列表就循环,不是就添加

老师给的装逼利器

def func2(lis):
    return [li for item in lis for li in func2(item)] if isinstance(lis, list)else [lis]


print(func2(list1))

看不懂 但是我会拆开哇~

def func2(lis):
    if isinstance(lis, list):
        result = []
        for item in lis:
            for li in func2(item):
                result.append(li)
        return result
    else:
        return [lis]

拆开以后是不是瞬间领悟了

顺便拓展下 对于列表推导式:

列表推导式 可以说是Python中一大亮点,可惜 ··· 我并不会用

从基础开始:~ GO

[i for i in lis] ==> 这是最基础的了吧··· 等同于下面展开
l = []
for i in lis:
    l.append(i)

看看这种用法

for i in lis:
    print(i)
平常打印之类的 经常看眼数据对吧 换个方式看吧 ==> [print(i) for i in lis]

反正都是一些常用的偷懒的方法

[print(i) for i in lis if i>5] ==> 加一些简单的判断
for i in lis:
    if i > 5:
        print(i)

猜猜看下面的打印结果

[i if i>8 else i-1 for i in range(10) if i>5]
惊不惊喜 不止后面可以加判断条件 前面也可以继续处理
l = []
for i in range(10):
    if i > 5:
        if i > 8:
            l.append(i)
        else:
            l.append(i-1)

一层循环没意思,加一层

[print(li) for item in lis for li in item] ==> 循环嵌套
for item in lis:
    for li in item:
        print(li)

当然 多层循环也可以加条件

[print(f'{y}*{x}={x*y}', end='\t\t') if x != 9 else print(f'{y}*{x}={x*y}') for y in range(1, 10) for x in range(y, 10)]
emm 有点问题  但是 大概 可能 也算一个乘法表··· 逃~

for y in range(1, 10):
    for x in range(y, 10):
        if x!= 9:
            print(f'{y}*{x}={x*y}', end='\t\t')
        else:
            print(f'{y}*{x}={x*y}')

当然 还可以加很多很多东西, 比如网上的那些黑魔法(一行画个图。。之类的) 就是利用列表推导式 + join

不过 推导式虽然好用,但不要写的太过于复杂,不利于阅读和维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值