Python 列表元素去重的3種方法

2021-06-27 07:59:54 字數 1827 閱讀 5422

以前面試的時候遇到過這個問題,今天閒著整理了以下,大概想到以下三種方法。

class delect_duplicate:

def method_set(self,mlist):

print("method_set is called")

print("before process mlist is", mlist)

l2 = set(mlist)

print("after processed by method_xunhuan, the mlist is",l2)

def method_xunhuan(self,mlist):

print("method_xunhuan is called")

print("before process mlist is", mlist)

if mlist:

mlist.sort()

last = mlist[-1]

for i in range(len(mlist) - 2, -1, -1):

if last == mlist[i]:

del mlist[i]

else:

last = mlist[i]

print("after processed by method_xunhuan, the mlist is",mlist)

def method3(self,mlist):

print("method3 is called")

print("before process mlist is", mlist)

temp =

print("after processed by method3, the result is",temp)

第一種方法直接用set方法,簡單粗暴有效,但是因為太簡單,往往不能滿足面試官的,

第二種方法是對列表的元素排序後從後往前比較,去除相同元素,但是前兩種方法都有乙個缺點,就是處理後元素的位置改變了,

第三種方法是用兩個列表進行處理,不改變元素的位置,測試**如下:

if __name__ == '__main__':

a = [1, 5, 4, 8, 9, 2, 4, 5, 1]

b = [1, 5, 4, 8, 9, 2, 4, 5, 1]

c = [1, 5, 4, 8, 9, 2, 4, 5, 1]

s = delect_duplicate()

s.method_set(a)

s.method_xunhuan(b)

s.method3(c)

執行結果如下:

method_set is called

before process mlist is [1, 5, 4, 8, 9, 2, 4, 5, 1]

after processed by method_xunhuan, the mlist is

method_xunhuan is called

before process mlist is [1, 5, 4, 8, 9, 2, 4, 5, 1]

after processed by method_xunhuan, the mlist is [1, 2, 4, 5, 8, 9]

method3 is called

before process mlist is [1, 5, 4, 8, 9, 2, 4, 5, 1]

after processed by method3, the result is [1, 5, 4, 8, 9, 2]

完整**:

python 多表去重 Python列表去重

無聊統計了下列表去重到底有多少種方法。1.集合 list set alist 如果要保持順序 import random if name main a random.randint 0,10 for i in xrange 10 b list set a b.sort key a.index 2.字...

Python列表去重

標題有語病,其實是這樣的 假設有兩個列表 l1 1,2,3,4 l2 1,2,5,6 然後去掉l1中包含的l2的元素 直接這樣當然是不行的 def removeexists l1,l2 for e1 in l1 if e1 in l2 l1.remove e1 不管什麼語言都不能這麼幹,但是又有一點...

Python中對於列表元素進行去重

list1 a a a b b c d d f 先將list1轉化為set集合去重,再將集合轉化為列表 list1 list set list1 print list1 在考慮順序性的前提下可以用list set list1 這種方法直接去重 順序亂了,記憶體位址也改變了。list2 a a a b...