python去重复功能_消除Python列表重复的几种方法,python,去,一些
做Python123平臺上的列表去重題,復述題目:
去除列表中的重復元素,考慮以下幾種情況:
l = [1, 1, 2, 3]
l = [[1], [1], [2], [3]]
l = [3, 2, 1, 1]
原文鏈接:
14025
總結一下網上的方法和我自己想的方法:
不考慮列表去重之后的元素順序
return list(set(l))
由于集合元素的唯一性,集合可以去重,但是集合的元素是無序的,轉換成列表之后原來的列表的元素順序會變化,在評判時不通過。并且第二項還會報錯
TypeError: unhashable type: 'list'
考慮到列表類型元素unhashable的問題,可以先把每個元素轉換成字符串,去重之后再去掉引號
a = [str(element) for element in l]
b = list(set(a))
duplicatedList = [eval(element) for element in b]
return duplicatedList
考慮到元素順序問題,可以這樣寫(參考鏈接:
鏈接
)
duplicatedList.sort(key=l.index)
return duplicatedList
列表的index函數的用法是
list.index(x[, start[, end]])
x --- 要查找的元素
start --- 查找開始的位置
end --- 查找結束的位置
sort方法的key參數的意義是主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自于可迭代對象中,指定可迭代對象中的一個元素來進行排序。
我的理解是,從去重之后的列表duplicatedList中取出一個元素,在l中找第一次出現的位置(索引),以這個索引為依據排序duplicatedList的元素。語法上等效于
duplicatedList.sort(key=lambda x:l.index(x))
這僅是我個人的理解,原作者沒解釋。如果我說的不對歡迎討論。
使用字典的fromkeys方法,第二項報unhashable錯誤
參考:
鏈接
# fromkeys 以列表的元素作為字典的鍵,把所有的鍵都賦同樣的值(如果不指定則默認賦值為None)
lst1 = []
dct = dict.fromkeys(l)
# 對字典的每一個鍵,字典的鍵是唯一的
for n in dct:
lst1.append(n)
return lst1
或者
return list(dict.fromkeys(l))
以下三種方法對于元素unhashable的情況依然有效
枚舉l的每個元素,如果沒在新列表里出現,則加在新列表的末尾,否則(重復了)不追加
new_lst = []
for v in l:
if v not in new_lst:
new_lst.append(v)
return v
使用enumerate函數枚舉
平臺的官方答案之一
#更簡潔的寫法是
return [value for index, value in enumerate(l) if value not in l[:index] ]
#其意義是枚舉列表每個元素(設索引為index,值為value),
#如果value沒有在l[0:index]中出現過(沒重復)則value加入到新列表中,如果重復就不追加
#如果還是看不懂,看下面的拆解版
r = []
for idx, value in enumerate(l):
if value not in l[:idx]:
r.append(value)
return r
基于索引遍歷列表
r = []
for idx in range(len(l)):
if l[idx] not in r:
#或者if l[idx] not in l[:idx]:
r.append(l[idx])
# 也可寫作
return [l[idx] for idx in range(len(l)) if l[idx] not in l[:idx]]
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python去重复功能_消除Python列表重复的几种方法,python,去,一些的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓定时开机怎么设置(安卓定时开机)
- 下一篇: 文物备案中心官网(文物备案中心)