ids = [1,2,3,3,4,2,3,4,5,6,1] news_ids = [] for id in ids: if id not in news_ids: news_ids.append(id) print news_ids
ids = [1,4,3,3,4,2,3,4,5,6,1] ids = list(set(ids))
import itertools ids = [1,4,3,3,4,2,3,4,5,6,1] ids.sort() it = itertools.groupby(ids) for k, g in it: print k
In [5]: ids = [1,4,3,3,4,2,3,4,5,6,1] In [6]: func = lambda x,y:x if y in x else x + [y] In [7]: reduce(func, [[], ] + ids) Out[7]: [1, 4, 3, 2, 5, 6]
其中的 lambda x,y:x if y in x else x + [y] 等價於 lambda x,y: y in x and x or x+[y] 。
思路其實就是先把ids變爲[[], 1,4,3,......] ,而後在利用reduce的特性.html
list2 = [] list1 = [1,2,3,2,2,2,4,6,5] for i in list1: if i not in list2: list2.append(i) list2 [1, 2, 3, 4, 6, 5]
或者使用刪除元素索引的方法對列表去重,而且不改變原列表的順序 # python for刪除的時候會往前移(垃圾回收機制),未遍歷到的後一個佔了前一個被刪除的"位置",致使這個數不會被遍歷到,而使最後的結果錯誤 # 局部變量在棧內存中存在,當for循環語句結束,那麼變量會及時被gc(垃圾回收器)及時的釋放掉,不浪費空間; # 若是使用循環以後還想去訪問循環語句中控制那個變量,使用while循環。 # 因此使用while循環刪除nums中的Val(的下標) nums = [1,2,3,3,4,2,3,4,5,6,1] val = 3 while val in nums: nums.pop(nums.index(val)) print nums return len(nums)