Python如何從列表中刪除相鄰和不相鄰的相同元素
Python從列表中刪除相鄰和不相鄰相同元素
相鄰元素是不相鄰元素中的一種特殊的存在,所以我們先來探討不相鄰的相同元素的刪除。
不相鄰元素的刪除
結(jié)果:list=[1,2,3,4] #第一種 list = [1,2,3,3,4,1,1] new_list = [] for i in list[:]: if i not in new_list: #可以刪除重復(fù)元素,不管是否相鄰 new_list.append(i) print(new_list) # 第二種 集合可以去重 先轉(zhuǎn)換成集合再轉(zhuǎn)換成列表 list = [1,2,3,3,4,1,1] print(list(set(list))) # 第三種 list = [1,2,3,3,4,1,1] list.sort() new_list = [] for i in range(len(list) - 1): if list[i] == list[i + 1]: new_list.append(list[i + 1]) for j in new_list: list.remove(j) print(list) # 第四種 # fromkeys 是把所有的鍵都賦同樣的值(如果不指定內(nèi)容則默認(rèn)賦值為None) list = [1,2,3,3,4,1,1] new_list = [] dct = dict.fromkeys(list) # print(dct) for n in dct: new_list.append(n) print(new_list) # 第五種 第四種方法的簡寫 list1 = [1,2,3,3,4,1,1] print(list(dict.fromkeys(list1)))
相鄰元素的刪除
#結(jié)果:list1 = [1, 2, 3, 4, 1] #第一種,比較相鄰兩個(gè)值,若相同,則del其中一個(gè),逐個(gè)遍歷,直到?jīng)]有重復(fù)的。 list1 = [1,2,2,3,3,4,1,1] for i in range(len(list1) - 1, 0, -1): if list1[i] == list1[i-1]: del list1[i] print(list1) #第二種,使用itertools庫 import itertools list1 = [1,2,2,3,3,4,1,1] new_list1 = [k for k, g in itertools.groupby(list1)] print(new_list1) #第三種 生成器(generator) #其中del_adjacent()是一個(gè)生成器類型,需要使用list轉(zhuǎn)換成列表 list1 = [1,2,2,3,3,4,1,1] def del_adjacent(iterable): prev = object() for iterm in iterable: if iterm != prev: prev = iterm yield iterm a = list(del_adjacent(list1)) print(a)
python比較列表相鄰元素(找相同或去重)
python列表去除相鄰重復(fù)相等數(shù)據(jù)(只保留一個(gè))
In [1]: import itertools In [2]: a=[0, 1, 3, 2, 4, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 16, 17, 18, 18, 19, 20, 20, 21, 22, 22, 22, 23, 23, 23, 26, 29, 29, 30, 32, 33, 34, 32, 32, 15, 24] In [3]: b=[k for k, _ in itertools.groupby(a)] In [4]: print(b) [0, 1, 3, 2, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 26, 29, 30, 32, 33, 34, 32, 15, 24]
python列表找到相鄰元素相同的元素值
(理解了 m=a[1:] n=a[:-1] 得到的就是要比較的前后數(shù)據(jù)之后,你就可以輕松地做玩轉(zhuǎn)相鄰元素啦)
In [22]: import numpy as np In [23]: a=[0, 1, 3, 2, 4, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 16, 17, 18, 18, 19, 20, 20, 21, 22, 22, 22, 23, 23, 23, 26, 29, 29, 30, 32, 33, 34, 32, 32, 15, 24] In [24]: m=a[1:] In [25]: n=a[:-1] In [26]: len(a) Out[26]: 41 In [27]: len(m) Out[27]: 40 In [28]: len(n) Out[28]: 40 In [29]: c=[i[0]==i[1] for i in zip(m, n)] In [30]: print(c) [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, True, False, False, True, False, False, True, False, False, True, True, False, True, True, False, False, True, False, False, False, False, False, True, False, False] In [31]: d=np.array(a[:-1])[c] In [32]: print(d) [ 4 16 18 20 22 22 23 23 29 32] In [33]: result = list(set(d)) In [34]: result Out[34]: [32, 4, 16, 18, 20, 22, 23, 29]
也可以用以下的方法比較出相鄰元素是否相等,即求出上面的變量 c,然后再執(zhí)行后面的步驟
In [35]: import operator In [36]: import itertools In [37]: c2=list(map(operator.eq, a, itertools.islice(a, 1, None))) In [38]: print(c2) [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, True, False, False, True, False, False, True, False, False, True, True, False, True, True, False, False, True, False, False, False, False, False, True, False, False] In [39]: c==c2 Out[39]: True
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)在Word中創(chuàng)建表格并填入數(shù)據(jù)與圖片
在Word中,表格是一個(gè)強(qiáng)大的工具,本文主要為大家介紹了如何使用Python在Word中創(chuàng)建表格并填入數(shù)據(jù)、圖片,以及設(shè)置表格樣式等,感興趣的可以了解下2024-03-03Python全景系列之控制流程盤點(diǎn)及進(jìn)階技巧
這篇文章主要為大家介紹了Python全景系列之控制流程盤點(diǎn)及進(jìn)階技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05Python中itertools庫的四個(gè)函數(shù)介紹
這篇文章主要介紹了Python中itertools庫的四個(gè)函數(shù),主要討論itertools庫中的十分使用的幾個(gè)函數(shù),并重點(diǎn)介紹什么時(shí)候我們應(yīng)該考慮使用它們,需要的朋友可以參考一下2022-04-04利用Opencv實(shí)現(xiàn)圖片的油畫特效實(shí)例
這篇文章主要給大家介紹了關(guān)于利用Opencv實(shí)現(xiàn)圖片的油畫特效的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Python Faker批量生成測(cè)試數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了Python Faker批量生成測(cè)試數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11Selenium使用Chrome模擬手機(jī)瀏覽器方法解析
這篇文章主要介紹了Selenium使用Chrome模擬手機(jī)瀏覽器方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04