今天胡哥又问了我一个问题:用一行代码如何把列表里的元素去重。
比如:
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}。