【Python】Python中list去重的幾種方法
阿新 • • 發佈:2018-12-09
目錄
方法一:
- 直接使用set
def set_duplicate_removal():
lis = [1, 2, 2, 3, 7, 7, 9, 9, 10, 10]
lis = set(lis)
print(lis)
方法二:
- 字典的fromkeys方法實現
def dict_duplicate_removal():
lis = [10, 3, 2, 7, 4, 7, 1, 9, 2, 10]
lis = {}.fromkeys(lis)
print(lis.keys())
方法三:
- 普通方法,使用輔助list
def duplicate_removal():
lis = [10, 3, 2, 7, 4, 7, 1, 9, 2, 10]
lis2 = list()
for li in lis:
if li not in lis2:
lis2.append(li)
print(lis2)
方法四:
- 對列表進行排重和計數
- 思想:L, R 雙邊界,L指向列表第一個元素,R指向第二個元素,
- 情況1:如果兩個元素不相等,輸出L指向的元素值,L指向R指向的元素,R指向後一個元素,
- 情況2:如果L、R指向的元素值相等,L不變,R指向後一個元素,直到不相等時輸出L指向的元素,R-L即為重複值的個數,L指向R當前指向的元素,R加1指向後一個元素。
- 重複執行直到最後一個元素。
- 複雜度 = 排序複雜度 + 排重計數複雜度 = O(nlogn) + O(n) = O(nlogn)
def duplicate_removal(): lis = [10, 3, 2, 7, 4, 7, 1, 9, 2, 10] # 使用系統方法排序 lis.sort() print('排序好的列表:', lis) L = 0 while L < len(lis): R = L + 1 while R < len(lis): if lis[L] != lis[R]: break R += 1 print(lis[L], R-L) L = R
- 優化
def duplicate_removal():
lis = [10, 3, 2, 7, 4, 7, 1, 9, 2, 10]
lis.sort()
print('排序好的列表:', lis)
left_value = lis[0]
num = 1
for right_value in lis[1:]:
if right_value != left_value:
print(left_value, num)
left_value = right_value
num = 0
num += 1
print(right_value, num)