可能重复:
How do you remove duplicates from a list in Python whilst preserving order?
这个问题可能很容易。例如,我有一个这样的列表:
a = [1,1,1,1,2,3,4,5,5,5,5,6,7,7,8,9,14,14]
我不想在列表中保留相同的元素。所以,我想将其转换为:
a = [1,2,3,4,5,6,7,8,9,14]
我该如何管理?提前谢谢。
答案 0 :(得分:3)
将其转换为集合:
a = list(set(a))
答案 1 :(得分:3)
您可以使用itertools中的unique_everseen
recipe,维护订单。
如果订单不重要,请使用set()
。
In [294]: a = [1,1,1,1,2,3,4,5,5,5,5,6,7,7,8,9,14,14]
In [295]: list(unique_everseen(a))
Out[295]: [1, 2, 3, 4, 5, 6, 7, 8, 9, 14]
unique_everseen
:
def unique_everseen(iterable, key=None):
"List unique elements, preserving order. Remember all elements ever seen."
# unique_everseen('AAAABBBCCDAABBB') --> A B C D
# unique_everseen('ABBCcAD', str.lower) --> A B C D
seen = set()
seen_add = seen.add
if key is None:
for element in ifilterfalse(seen.__contains__, iterable):
seen_add(element)
yield element
else:
for element in iterable:
k = key(element)
if k not in seen:
seen_add(k)
yield element
答案 2 :(得分:2)
将列表转换为集合将删除重复项,然后将其转换回列表。
a = list(set(a))
答案 3 :(得分:1)
import itertools
a = [k for k, g in itertools.groupby(a)]
这假定原始列表中的重复项已经分组,如您的示例所示。与使用set()
相比,此方法的好处是可以保留原始订单。
答案 4 :(得分:0)
或者,如果您需要保留sorted
订单:
a = [1,1,1,1,2,3,4,5,5,5,5,6,7,7,8,9,14,14]
sorted(set(a))
结果:
[1,2,3,4,5,6,7,8,9,14]