以前面試的時候遇到過這個問題,今天閒著整理了以下,大概想到以下三種方法。
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...