How to remove duplicates from Python list and keep order?
本问题已经有最佳答案,请猛点这里访问。
给定一个字符串列表,我想按字母顺序排序并删除重复项。我知道我能做到:
1 2 3 | from sets import Set [...] myHash = Set(myList) |
但我不知道如何按字母顺序从哈希表中检索列表成员。
我并没有嫁给哈什,所以任何方法都可以做到这一点。另外,性能不是一个问题,所以我更喜欢用代码清晰地表示的解决方案,而不是快速但更不透明的解决方案。
可以使用内置函数对列表进行排序和消除重复:
1 | myList = sorted(set(myList)) |
set 是python>的内置函数,大于等于2.3sorted 是python>的内置函数,大于等于2.4
如果您的输入已经排序,那么可能有一种更简单的方法:
1 2 3 | from operator import itemgetter from itertools import groupby unique_list = list(map(itemgetter(0), groupby(yourList))) |
如果要保持原始列表的顺序,只需使用ordereddict和
在Python 2:
1 2 3 4 | from collections import OrderedDict from itertools import izip, repeat unique_list = list(OrderedDict(izip(my_list, repeat(None)))) |
在python3中更简单:
1 2 3 4 | from collections import OrderedDict from itertools import repeat unique_list = list(OrderedDict(zip(my_list, repeat(None)))) |
如果不喜欢迭代器(zip和repeat),可以使用生成器(在2&3中都可以使用):
1 2 | from collections import OrderedDict unique_list = list(OrderedDict((element, None) for element in my_list)) |
如果你追求的是清晰,而不是速度,我认为这很清楚:
1 2 3 4 5 6 7 | def sortAndUniq(input): output = [] for x in input: if x not in output: output.append(x) output.sort() return output |
但是它是O(n^2),在输入列表的每个元素中重复使用not-in。
>但我不知道如何按字母顺序从哈希表中检索列表成员。
不是你的主要问题,但是为了将来参考杆的答案,使用
1 2 3 | for key in sorted(my_dict.keys()): print key, my_dict[key] ... |
另外,由于
1 2 3 | for key, val in sorted(my_dict.items()): print key, val ... |
对于字符串数据
1 2 3 4 5 6 | output = [] def uniq(input): if input not in output: output.append(input) print output |