python技巧(2)--碾平列表和列表去重

总第 116 篇文章,本文大约  1000 字,阅读大约需要 3 分钟

今天介绍和列表相关的两个小技巧:

  • 碾平列表(flatten list),也就是列表里的元素也带有列表的情况;

  • 列表去重,保留原始顺序和不保留顺序的做法


1. 碾平列表

碾平列表(flatten list ),即当列表里面嵌套列表,如何将这些子列表给取出来,得到一个不包含子列表的列表,示例如下:

list1 = [1, [2, [3,4]], 5]


=>new_list = [1, 2, 3, 4, 5]

这里介绍 3 种方法,分别如下。

方法1:利用递归的思想,代码如下:

list1 = [1, [2, [3,4]], 5]
res = []


def fun(s):
    for i in s:
        if isinstance(i, list):
            fun(i)
        else:
            res.append(i)


fun(list1)
print(res)

接着是两种比较高级的写法,用 lambda 实现一个匿名函数

方法2:

flat = lambda L: sum(map(flat, L), []) if isinstance(L, list) else [L]


print(flat(list1))

方法3:

a = [1, 2, [3, 4], [[5, 6], [7, 8]]]


flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x]


print(flatten(a))

2. 列表去重

列表去重可能会破坏原有的顺序,所以下面分别介绍保留顺序和不保留顺序的做法。

去重,但改变顺序

去重但改变顺序,两种方法

方法1 就是利用 set 进行去重

l1 = ['b','c','d','b','c','a','a']
l2 = list(set(l1))
print l2

方法2 是利用字典的键不重复的特性,将列表的元素作为一个字典的键,然后返回这个字典的所有键,即可实现去重的操作。

l1 = ['b','c','d','b','c','a','a']
l2 = {}.fromkeys(l1).keys()
print l2
去重,不改变顺序

利用 sortedset 方法实现去重并保留原始顺序,这里 sorted 指定排序的规则就是按照原列表的索引顺序

l1 = ['b','c','d','b','c','a','a']
l2 = sorted(set(l1),key=l1.index)
print l2

欢迎关注我的微信公众号--算法猿的成长,或者扫描下方的二维码,大家一起交流,学习和进步!

如果觉得不错,在看、转发就是对小编的一个支持!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

spearhead_cai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值