Python list去重且保持原順序不變的方法

背景

python 去重一頓操作猛如虎,set list 扒拉下去,就去重瞭,但是順序就打亂瞭。如果對順序沒有需要的話,這樣確實沒有什麼所謂。
但是如果需要保留順序的話,就需要一點小小的改變。

code && demo

list 去重,順序亂掉

# normal 寫法
l1 = ['b','c','d','b','c','a','a']
l2 = list(set(l1))
print(l2)

# plus 寫法
l1 = ['b','c','d','b','c','a','a']
l2 = {}.fromkeys(l1).keys()


去重後還是原 list 順序

# normal 寫法
l1 = ['b','c','d','b','c','a','a']
l2 = list(set(l1))
l2.sort(key=l1.index)

# plus 寫法
l1 = ['b','c','d','b','c','a','a']
l2 = sorted(set(l1),key=l1.index)

寫循環代碼實現

# normal 寫法
l1 = ['b','c','d','b','c','a','a']
l2 = []
for i in l1:
  if not i in l2:
    l2.append(i)
    
# plus 寫法

l1 = ['b','c','d','b','c','a','a']
l2 = []
[l2.append(i) for i in l1 if not i in l2]

寫 while 循環代碼實現

L = [3, 1, 2, 1, 3, 4]
T = L[:]
for i in L:
  while T.count(i) > 1:
    del T[T.index(i)]
T.sort(key=L.index)

lambda 寫法

備註:

  • ambda L,i: L if i in L else L + [i]    # 如果元素在列表中,那麼返回列表本身,不在的話 L + [i]
  • [[],] + L # 等價於 [[], L],方便後面計算

總結

如果糾結空間復雜度的,用 python 幹啥?
先談能不能完成,再談優化吧。

以上就是Python list去重且保持原順序不變的方法的詳細內容,更多關於Python list去重的資料請關註WalkonNet其它相關文章!