⑴ python刪除list重復元素
在Python中主要有5種方式 。
1、使用set函數
set是定義集合的,無序,非重復
numList = [1,1,2,3,4,5,4]
print(list(set(numList)))
#[1, 2, 3, 4, 5]
2、先把list重新排序,然後從list的最後開始掃描
a = [1, 2, 4, 2, 4, 5,]
a.sort()
last = a[-1]
for i in range(len(a) - 2, -1, -1):
if last == a[i]:
del a[i]
else:
last = a[i]
print(a) #[1, 2, 4, 5]
3、使用字典函數
a=[1,2,4,2,4,]
b={}
b=b.fromkeys(a)
c=list(b.keys())
print(c) #[1, 2, 4]
4、append方式
def delList(L):
L1 = []
for i in L:
if i not in L1:
L1.append(i)
return L1
print(delList([1, 2, 2, 3, 3, 4, 5])) #[1, 2, 3, 4, 5]
5、count + remove方式
def delList(L):
for i in L:
if L.count(i) != 1:
for x in range((L.count(i) - 1)):
L.remove(i)
return L
print(delList([1, 2, 2, 3, 3, 4]))#[1, 2, 3, 4]
⑵ 如何找出 python list 中有重復的項
可以對第二個list的元素進行遍歷,檢查是否出現在第二個list當中,如果使用表理解,可以使用一行代碼完成任務。
list1 = [1,2,3,4,5]
list2 = [4,5,6,7,8]
print [l for l in list1 if l in list2]
# [4,5]
如果每一個列表中均沒有重復的元素,那麼還有另外一種更好的辦法。首先把兩個list轉換成set,然後對兩個set取交集,即可得到兩個list的重復元素。
set1 = set(list1)
set2 = set(list2)
print set1 & set 2
# {4,5}
⑶ python中對list去重的多種方法
python中對list去重的多種方法
今天遇到一個問題,在同事隨意的提示下,用了 itertools.groupby 這個函數。不過這個東西最終還是沒用上。
問題就是對一個list中的新聞id進行去重,去重之後要保證順序不變。
直觀方法
最簡單的思路就是:
這樣也可行,但是看起來不夠爽。
用set
另外一個解決方案就是用set:
代碼如下:
ids = [1,4,3,3,4,2,3,4,5,6,1]
ids = list(set(ids))
這樣的結果是沒有保持原來的順序。
按照索引再次排序
最後通過這種方式解決:
代碼如下:
ids = [1,4,3,3,4,2,3,4,5,6,1]
news_ids = list(set(ids))
news_ids.sort(ids.index)
使用itertools.grouby
文章一開始就提到itertools.grouby, 如果不考慮列表順序的話可用這個:
代碼如下:
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
關於itertools.groupby的原理可以看這里:http://docs.python.org/2/library/itertools.html#itertools.groupby
網友補充:用rece
網友reatlk留言給了另外的解決方案。我補充並解釋到這里:
代碼如下:
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]: rece(func, [[], ] + ids)
Out[7]: [1, 4, 3, 2, 5, 6]
上面是我在ipython中運行的代碼,其中的 lambda x,y:x if y in x else x + [y] 等價於 lambda x,y: y in x and x or x+[y] 。
⑷ python兩個列表字典,刪除相同元素
按照你的要求去除list2中的重復項的Python程序如下
list1=[{'title':'我是標題1','url':'我是網址1'},{'title':'我是標題2','url':'我是網址2'},{'title':'我是標題3','url':'我是網址3'}]
list2=[{'title':'我是最新1','url':'我是最新網址1'},{'title':'我是最新2','url':'我是最新網址2'},{'title':'我是標題1','url':'我是網址1'}]
list3=[item for item in list2 if item not in list1]
print(list3)
⑸ python如何實現刪除某list中所有重復出現的元素
1. 使用內置函數set
lists = [1,1,2,3,4,6,6,2,2,9]
lists = list(set(lists))
先將列表轉換為集合,因為集合是不重復的,故直接刪除重復元素,而且輸出結果為排序後的
⑹ python中列表如何去重
可以利用set去重
代碼如下:
#coding=utf-8
li=[1,2,3,4,2,1,3,0]#列表
li2=set(li)
print(li2)
⑺ python 如何找出兩個list中的相同元素
這個問題有多種解法,最常見的是brute-force 也叫暴力枚舉法,也就是把兩個list當中的每個元素都取出來進行兩兩比較,直到找到相同元素。設第一個數組的長度為n,第二個數組的長度為m,則時間復雜度為O(n*m),空間復雜度為O(1)
但是個問題常見的解決方法是哈希表。在Python當中有Dictionary這種數據類型,其實是一個哈希表。運用這種數據類型,可以迅速檢索到想要的元素。但這種方法需要存儲一組元素,所以時間復雜度為O(n),空間復雜度為O(m)。
以下是程序:
def find_same_element(l1, l2):
dist = {}
for i in l1:
dist[i] = 1
for i in l2:
if dist.get(i) > None:
return i
return None
以下是檢驗
l1 = [1, 2, '34', 34, 5]
l2 = [4, 7, 8]
print find_same_element(l1, l2)
應當輸出None
l1 = [1, 2, '34', 34, 5]
l2 = [4, 7, 8,5]
print find_same_element(l1, l2)
應當輸出5
這個函數只能找到一個共同元素,如果兩個list有多個相同元素則只能輸出中間的一個。
這個問題常見於面試題,屬於最簡單的面試題目。需要給面試官說明的是,
第一,哈希表可以快速檢索元素,
第二,python有獨特的數據類型,
第三,多個共同元素的情況需要面試官告知如何處理,
第四,注意沒有共同元素的時候的輸出(程序中為None但面試官希望你能提出這個問題)
⑻ Python如何對列表進行去重
1.使用set的特型,python的set和其他語言類似,是一個無序不重復元素集
orgList=[1,0,3,7,7,5]
#list()方法是把字元串str或元組轉成數組
formatList=list(set(orgList))
print(formatList)
結果:
[0,1,3,5,7]
2.使用keys()方法
orgList=[1,0,3,7,7,5]
#list()方法是把字元串str或元組轉成數組
formatList=list({}.fromkeys(orgList).keys())
print(formatList)
結果:
[0,1,3,5,7]
上面兩種方法的問題是:結果是沒有保持原來的順序。
3.循環遍歷法
orgList=[1,0,3,7,7,5]
formatList=[]
foridinorgList:
ifidnotinformatList:
formatList.append(id)
print(formatList)
結果:
[1,0,3,7,5]
這樣的代碼不夠簡潔
4.按照索引再次排序
orgList=[1,0,3,7,7,5]
formatList=list(set(orgList))
formatList.sort(key=orgList.index)
print(formatList)
結果:
[1,0,3,7,5]
⑼ python如何刪除list里重復的元素
這個可簡單可復雜。
簡單的:利用集合
a=list(set(a))#這樣就可以了,是不是很簡單
復雜的:
就是先對列表排序,然後比較相鄰元素是否相同,相同的則刪除後面的。大體演算法思路,代碼自己寫吧
當然還有其他的演算法...
-----------------------------------------------------------------------------------
額, 不好意思,看錯了
defQ(a):
aa=[]
foriina:
ifa.count(i)==1:
aa.append(i)
returnaa
這個就可以了,利用 list.count(obj) 計算obj在list中出現的次數進行判斷