这个问题可能很简单。例如,我有一个这样的列表:
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]
我该如何管理?先感谢您。
这个问题可能很简单。例如,我有一个这样的列表:
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]
我该如何管理?先感谢您。
将其转换为一组:
a = list(set(a))
您可以使用itertools 中的unique_everseen
配方,它维护顺序。
如果顺序无关紧要,请使用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
将列表转换为集合将删除重复项,然后将其转换回列表。
a = list(set(a))
import itertools
a = [k for k, g in itertools.groupby(a)]
这假设原始列表中的重复项已经分组,如您的示例所示。这种方法比使用的好处set()
是可以保持原来的顺序。
或者,如果您需要保留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]