Python移除列表里重复的数据,并保留原来的次序

这有好几种方法实现。

使用set实现

def unique_everseen(items):
seen = set()
seen_add = seen.add
return [x for x in items if not (x in seen or seen_add(x))]

函数里把seen.add赋值给seen_add本地变量是出于性能考虑,因为seen会动态变化,如果直接在迭代里调用它会导致python每次都需要对它做检查。

more_itertools内置的unique_everseen函数

安装more_itertools

pip install more_itertools

使用

>>> from  more_itertools import unique_everseen
>>> items = [1, 2, 0, 1, 3, 2]
>>> list(unique_everseen(items))
[1, 2, 0, 3]

OrderedDict

>>> from collections import OrderedDict
>>> items = [1, 2, 0, 1, 3, 2]
>>> list(OrderedDict.fromkeys(items))
[1, 2, 0, 3]

版权声明:著作权归作者所有。

相关推荐

Spark DataFrame join后移除重复的列

在Spark,两个DataFrame做join操作后,会出现重复的列。有两种方法可以用来移除重复的列。方法一:join表达式使用字符串数组(用于join的列)df1.join(df2, Seq("id","name"),"left") 这里DataFrame df1和df2使用了id和name两列来做join,返回的结

Python随机挑选列表的元素

Python提供了几种方法用于随机抽样。random.choice如果对随机的结果要求不严格,可以使用Python提供的random.choice。import random list = ['a','b','c','d'] print(random.choice(list)) random.choice可以称为伪随机,如果对random给定种子,那么它随机出来的结

Python获取列表的元素个数

len()为Python的内置函数,它会返回对象里的项目数,这些对象可以是sequence(如string, bytes, tuple, list, range),也可以是collection (如dictionary, set)Python里的列表没有类似于length或size的属性和方法,可以使用len来获取列表的元素个数>&

Python:查询列表给定元素的索引

单一索引列表的index()函数返回列表里第一次遇到给定元素的索引。>>> ["a", "b", "c"].index("b") 1 多个索引如果需要返回给定元素的所有索引,则要遍历列表:indexes = [index for i

MySQL删除重复的行,保留其中一行

示例有这样一个表CREATE TABLE `tests` (  `id` int(11) DEFAULT NULL,  `name` varchar(20) DEFAULT NULL ) ; 现在需要删除重复name的行,但保留其中一行。方法一:保留id小的一行DELETE n1 

Python字典列表按字典的键值排序

列表list_to_be_sorted = [{'name':'Jack', 'age':39}, {'name':'Bob', 'age':10}] 对列表按name的值排序得到:list_to_be_sorted = [{'name':'Bob', 'age':39}, {'name':'Jack',&n