可能重複:
How do you remove duplicates from a list in Python whilst preserving order?在Python中結合列表元素?
這個問題可能是很容易的。例如,我有這樣的列表:
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]
如何管理呢?先謝謝你。
可能重複:
How do you remove duplicates from a list in Python whilst preserving order?在Python中結合列表元素?
這個問題可能是很容易的。例如,我有這樣的列表:
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))
您可以使用unique_everseen
recipe從itertools,它維持秩序。
如果順序並不重要,然後使用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
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 ]
是否順序有關係嗎? –
或訂單無關緊要,請使用'list(set(a))'。 –
然後是後續問題是*你甚至想列表,或者僅僅是一個迭代?*由於在後一種情況下,爲什麼將其轉換回一個列表? 'set(a)',你在家。 – kojiro