In [1]: l1 = ['a',2,3,0,9.0,0,2,6,'b','a']
In [2]: l2 = list(set(l1))
In [3]: l2
Out[3]: ['a', 0, 2, 3, 6, 9.0, 'b']
在這裏你可以看到列表L2中與不同的順序下降,則原來的L1,我需要刪除從我的列表中重複的元素,而不改變列表元素的序列/順序....我如何使用set維護我的列表序列?
In [1]: l1 = ['a',2,3,0,9.0,0,2,6,'b','a']
In [2]: l2 = list(set(l1))
In [3]: l2
Out[3]: ['a', 0, 2, 3, 6, 9.0, 'b']
在這裏你可以看到列表L2中與不同的順序下降,則原來的L1,我需要刪除從我的列表中重複的元素,而不改變列表元素的序列/順序....我如何使用set維護我的列表序列?
這是把我的頭頂部(使用類型的字典):
l1 = ['a',2,3,0,9.0,0,2,6,'b','a']
l2 = []
s = {}
for i in l1:
if not i in s:
l2.append(i)
s[i] = None
# l2 contains ['a', 2, 3, 0, 9.0, 6, 'b', 'a']
編輯:使用套(也把我的頭頂部):
l1 = ['a',2,3,0,9.0,0,2,6,'b','a']
l2 = []
s = set()
for i in l1:
if not i in s:
l2.append(i)
s.add(i)
如果你不關心效率,這是O(n * m個)
>>> sorted(set(l1), key=l1.index)
['a', 2, 3, 0, 9.0, 6, 'b']
使用中間字典是更復雜,但是O(N + M * 10gm的)
其中n是在L1的元素數m是L1的獨特元素的數量
>>> l1 = ['a',2,3,0,9.0,0,2,6,'b','a']
>>> d1=dict((k,v) for v,k in enumerate(reversed(l1)))
>>> sorted(d1, key=d1.get, reverse=True)
['a', 2, 3, 0, 9.0, 6, 'b']
在Python3.1你有OrderedDict所以它很容易
>>> l1 = ['a',2,3,0,9.0,0,2,6,'b','a']
>>> list(OrderedDict.fromkeys(l1))
['a', 2, 3, 0, 9.0, 6, 'b']
upvote for複雜性關注@John La Rooy – Ankush 2017-05-25 06:09:43
您可以通過定義這樣的功能解決這個問題:
def dedupe(items):
seen = set()
for item in items:
if item not in seen:
yield item
seen.add(item)
要使用它:
>>> l1 = ['a',2,3,0,9.0,0,2,6,'b','a']
>>> l2 = list(dedupe(l1))
>>> l2
['a', 2, 3, 0, 9.0, 6, 'b']
@carl - 嗯?該問題涉及列表中的重複項。這只是一個列表,但他希望在不排除其內部排序的情況下使其具有獨特性...... – Stephen 2010-08-25 05:13:21
「我如何使用set來維護我的列表序列?」集合**無序**根據定義 – NullUserException 2010-08-25 05:19:23
@advait關於我的答案 - 謝謝,我真的不知道它是否會成立。早上6點,所以我真的不想啓動python。試圖改變使用有序字典的答案,但我不太熟悉它們,所以我只是刪除我認爲的答案。 – Stephen 2010-08-25 06:54:41