python——靠set用一行代码将列表里的元素去重

时间:2023-01-30 07:36:06

     今天胡哥又问了我一个问题:用一行代码如何把列表里的元素去重。

比如:

a = [[1, 2, 3], [2, 3, 4], [4, 5], [1, 2, 3]]
需要的效果是最后得到1,2,3,4,5。

我脑子里第一闪过的就是用set。

随后试了一下,使用双重列表推导式加set,可以轻松解决。

set([val for i in a for val in i])
不了解双重列表推导的同学,可以看我的上一篇博客:双重列表推导式

解决问题后再思考一下,效率是否足够高?

使用双重列表推导式很显然需要循环列表里的每一个元素,最后才统一去重,如果这个列表很大的话,会不会出现

爆内存的情况?

其实set有一个update方法,效果是把不在set内的元素加入到set中。

就是说我们有个set,a = {1, 2, 3, 4, 5},然后set.update([1,2,6]),只有6会加入到a。

所以另一种方法就出现了:

[b.update(val) for val in q]
当然这个不能一行解决了,要先b = set(),最后b也是{1, 2, 3, 4, 5}。