listdistinctpython
① python兩個列表怎麼比較找出不同
可以使用把列表轉換成集合然後做它們的差集,比如我們可以從下面的例子中得出l1和l2列表不同的元素:
l1 = [1,2,3,4,5]
l2 = [1,3,5]
difference = list(set(l1) - set(l2))
print(difference)
輸出:
[2, 4]
② 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實現給定一個列表判斷裡面是否有重復元素
有兩個方法:
使用列表的count方法,因為count方法可以做對象內的元素進行出現次數疊加計算
list1=[1,2,3,4,4,5,6,7]
list1.count(1)#結果為1
list1.count(4)#結果為2
foriinlist1:
iflist1.count(i)>=2:
print('該元素%s重復'%i)
#結果:
該元素4重復
該元素4重復#因為迭代了兩次4所以有兩次輸出,功能是實現了,但是卻列印了兩次,有點不理想
2.借用工廠函數set()把對象轉為集合和列表的方法(淺復制),集合會默認把重復元素去掉
list1=[1,2,3,4,4,5,6,7]
list2=list1.()#為了不破壞原數據,臨時淺復制給變數list2
list3=list(set(list2))#使用set()函數將list2轉為集合去掉重復元素又用list()轉回列表
foriinlist3:#對無重復元素的列表list3迭代
ifiinlist2:
list1.remove(i)#當list3內的元素存在於list2中,則把其元素從list2中刪除,最後就會留下重復元素
print('list1:%s中的重復元素有:%s'%(list1,list2))#組後輸出原數據list1和最終結果list2
#結果:
list1:[1,2,3,4,4,5,6,7]中的重復元素有:[4]
#效果實現了,也沒問題,就是變數使用有點多。看你選擇了
④ 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]
⑤ list對象如何實現重命名(Python)
# coding = utf-8
import os
path = "D:\\chunyu"#想要重命名所有文件存放的文件夾
filelist = os.listdir(path) #該文件夾下所有的文件(包括文件夾)
list = []
fileopen = open('D:\chunyu.txt','r')#之後想要重命名成的所有名字的集合,這個名字為除去文件擴展名的文件名
i =0
for file in filelist:
print(file)
for line in fileopen:
line = line.strip('\n')
list.append(line)#讀取txt裡面的所有名字的集合寫入list文件
print(list)
fileopen.close()
for file in filelist: #遍歷所有文件
Olddir=os.path.join(path,file) #原來的文件路徑
if os.path.isdir(Olddir): #如果是文件夾則跳過
continue
filename=os.path.splitext(file)[0] #文件名
filetype=os.path.splitext(file)[1] #文件擴展名
Newdir=os.path.join(path,str(list[i])+filetype)
os.rename(Olddir,Newdir)#重命名
print(Olddir+" has changed as "+Newdir)
i = i+1
⑥ Python。重復元素判定。編寫一個函數,接受列表作為參數
代碼如下:
def func1(num_list):
if len(num_list) != len(set(num_list)):
return True
else:
return False
if __name__ == '__main__':
num_list = [[1, 2, 3, 4], [6, 7, 8], [4, 5, 6, 6, 6]]
for one_list in num_list:
print(func1(one_list))
運行結果:

(6)listdistinctpython擴展閱讀
python對列表去重的幾種方式:
1、直觀方法,先建立一個新的空列表,通過遍歷原來的列表,再利用邏輯關系not in 來去重。總結:這樣可以做出來,但是過程不夠簡單。但是此方法保證了列表的順序性。
2、利用set的自動去重功能,將列表轉化為集合再轉化為列表,利用集合的自動去重功能。簡單快速。缺點是:使用set方法無法保證去重後的順序。
⑦ python的list 和tupe
一、list
list是python內置的有序的列表,可以隨時添加和刪除其中的元素
1、 定義
list_name = ["param1","param2","param3"]
2、訪問
1)用索引來訪問,索引從0開始
索引不可以越界,否則會報錯,最後一個元素的索引是len(city) - 1
2)還可以從後開始訪問 最後一個元素的索引為-1 依次類推,第一個元素的索引為-len(city)
>>> city[-1]
>>> '廣州'
3、元素的追加
4、元素的插入
在city的索引1處增加 重慶
>>> city.insert(1,'重慶')
>>> city
>>> ['北京', '重慶', '上海', '廣州', '南京']
5、元素的刪除
1)刪除末尾
2)刪除指定位置元素 pop(i),i為索引值
6、元素的替換
7、二維list
訪問的時候 我們就可以直接 city[1][0] city[1][1]來訪問 其中的元素值
二、tuple(元組)
tupe和list的最大的區別就是 tuple一旦被創建 就無法修改
1、定義
2、訪問
和list是一樣的 country[0],country[1]。由於tuple是不可變的,所以沒有append 和insert 函數
3、 一個元素的tuple
我們發現 當tuple的元素只有一個元素的時候,python會認為括弧就是小括弧的功能,就會按照整數或者字元串解析,為了解決這個問題,python規定這種情況 在後面加一個逗號','就可以
4、 tuple的指向不變
你會驚訝,怎麼可以變了呢??
其實在python內部,c[0],c[1]指向 1 和 2,而c[2]是指向的一個list對象,其實變的不是tuple的元素,而是list的元素。tuple一開始指向的list並沒有改成別的list,所以,tuple所謂的「不變」是說,tuple的每個元素,指向永遠不變.
⑧ Python 怎麼除去list中的重復值以下是不正確的,結果是[1, 1, 2, 3, 4, 4, 5],為什麼
需要執行兩次une(a)才能去除
改了一下代碼,自己跑一下下面的兩端代碼就應該知道為什麼了,效果是一樣的
>>>a=[1,1,1,1,2,3,3,3,4,4,4,4,5,5]
>>>def une(lst):
for i in lst:
print 'i=',i
print 'count('+str(i)+')='+str(lst.count(i))
if lst.count(i) > 1:
lst.remove(i)
print 'a=',a
print '-----------------------------------------'
>>>une(a)
>>>a=[1,1,1,1,2,3,3,3,4,4,4,4,5,5]
>>>def une(lst):
num = len(lst)
n=0
for n in range(num):
#print 'n=',n
i = lst[n]
print 'i=',i
print 'count('+str(i)+')='+str(lst.count(i))
if lst.count(i) > 1:
lst.remove(i)
print 'a=',a
print '-----------------------------------------'
>>>une(a)
怎麼改une不用我教了吧
⑨ python兩個列表字典,用list1對比list2 保留list2中不含list1的數據
請問,怎樣刪除list2中和list1相同的數據?,然後得到一個新的列表數據
這個是可以通過得到的
list3=[item for item in list2 if item not in list1]以title為准,主要是想篩掉list1中的內容。list3是list1剩下的,不包含list2中的數據
這個是可以通過得到
list3 = [item for item in list1 if item not in list2]
⑩ python中list表示什麼
list是python語言中的基本數據類型列表,使用[]表示;列表中元素的類型可以不相同,它支持數字,字元串甚至可以包含列表,如下:
ak = [1, '67',true,[23,45,67]]
