3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
def unique(items):
found = set([])
keep = []
for item in items:
if item not in found:
found.add(item)
keep.append(item)
return keep
print unique([1, 1, 2, 'a', 'a', 3])

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
使用方法:
lst = [8, 8, 9, 9, 7, 15, 15, 2, 20, 13, 2, 24, 6, 11, 7, 12, 4, 10, 18, 13, 23, 11, 3, 11, 12, 10, 4, 5, 4, 22, 6, 3, 19, 14, 21, 11, 1, 5, 14, 8, 0, 1, 16, 5, 10, 13, 17, 1, 16, 17, 12, 6, 10, 0, 3, 9, 9, 3, 7, 7, 6, 6, 7, 5, 14, 18, 12, 19, 2, 8, 9, 0, 8, 4, 5]
并使用timeit模塊:
$ python -m timeit -s 'import uniquetest' 'uniquetest.etchasketch(uniquetest.lst)'
依此類推,對(duì)于其他各種功能(我以其發(fā)布者的名字命名),我得到了以下結(jié)果(在我的第一代Intel MacBook Pro上):
Allen: 14.6 μs per loop [1]
Terhorst: 26.6 μs per loop
Tarle: 44.7 μs per loop
ctcherry: 44.8 μs per loop
Etchasketch 1 (short): 64.6 μs per loop
Schinckel: 65.0 μs per loop
Etchasketch 2: 71.6 μs per loop
Little: 89.4 μs per loop
Tyler: 179.0 μs per loop
[1]請(qǐng)注意,艾倫(Allen)修改了列表–我認(rèn)為這會(huì)浪費(fèi)時(shí)間,因?yàn)樵搕imeit模塊運(yùn)行代碼100000次,其中99999個(gè)使用的是非重復(fù)列表。
摘要:具有集合的直接實(shí)現(xiàn)勝過令人困惑的一線:-)

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
這是迄今為止最快的解決方案(對(duì)于以下輸入):
def del_dups(seq):
seen = {}
pos = 0
for item in seq:
if item not in seen:
seen[item] = True
seq[pos] = item
pos += 1
del seq[pos:]
lst = [8, 8, 9, 9, 7, 15, 15, 2, 20, 13, 2, 24, 6, 11, 7, 12, 4, 10, 18,
13, 23, 11, 3, 11, 12, 10, 4, 5, 4, 22, 6, 3, 19, 14, 21, 11, 1,
5, 14, 8, 0, 1, 16, 5, 10, 13, 17, 1, 16, 17, 12, 6, 10, 0, 3, 9,
9, 3, 7, 7, 6, 6, 7, 5, 14, 18, 12, 19, 2, 8, 9, 0, 8, 4, 5]
del_dups(lst)
print(lst)
# -> [8, 9, 7, 15, 2, 20, 13, 24, 6, 11, 12, 4, 10, 18, 23, 3, 5, 22, 19, 14,
# 21, 1, 0, 16, 17]
字典查找比Python 3中的字典查找要快一些。
添加回答
舉報(bào)