北京冬奥会最近正如火如荼地展开着,本届冬奥会吉祥物冰墩墩(BingDwenDwen)因为其萌萌憨憨的熊猫造型,成功火遍海内外。
聊完吉祥物,我们再聊回工作。很多时候,我们给定一个txt或者Excel文件接收用户的输入参数,但是由于用户输入端不受控,很可能我们拿到文件,解析后的某个字段有很多重复项,那么在具体业务前对数据进行去重就显得非常必要。
具体到列表的快速去重这一朴素的需求,我们有哪些方法呢?
方法一:利用列表特性,遍历列表元素来实现
In [1]: original_list=[3,7,4,4,3,2,1]
In [2]: result_list=[]
In [3]: for element in original_list:
...: if element not in result_list:
...: result_list.append(element)
...:
In [4]: print(result_list)
[3, 7, 4, 2, 1]
方法二:用python的字典结构实现去重
我们都知道,字典的键(key)默认不能重复,如果对一个字典的键(key)反复赋值(value),最终保留的永远是最后存入的键值对。我们不妨利用字典这个特性,最终将字典的key存入新的列表即可。
In [5]: original_list=[3,7,4,4,3,2,1]
In [6]: my_dic=dict.fromkeys(original_list)
In [7]: print(my_dic)
{3: None, 7: None, 4: None, 2: None, 1: None}
In [8]: result_list=list(my_dic)
In [9]: print(result_list)
[3, 7, 4, 2, 1]
方法三:利用集合(set)来去重
我们知道,集合的一个关键特性就是元素中没有重复项,用它来去重后再转为列表,再合适不过了。
In [10]: original_list=[3,7,4,4,3,2,1]
In [11]: my_set=set(original_list)
In [12]: print(my_set)
{1, 2, 3, 4, 7}
In [13]: result_list=list(my_set)
In [14]: print(result_list)
[1, 2, 3, 4, 7]
通过对比三种方法不难发现,方法二和方法三实际都可以借助一行代码快速实现,但是仅有方法一可以保留列表原先的元素排序,可谓各有优劣,我们只需要根据业务要求来选择恰当的方法即可。