Python如何从列表中删除相邻和不相邻的相同元素
作者:小琳爱分享
这篇文章主要介绍了Python如何从列表中删除相邻和不相邻的相同元素问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Python从列表中删除相邻和不相邻相同元素
相邻元素是不相邻元素中的一种特殊的存在,所以我们先来探讨不相邻的相同元素的删除。
不相邻元素的删除
结果: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: #可以删除重复元素,不管是否相邻 new_list.append(i) print(new_list) # 第二种 集合可以去重 先转换成集合再转换成列表 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 是把所有的键都赋同样的值(如果不指定内容则默认赋值为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)))
相邻元素的删除
#结果:list1 = [1, 2, 3, 4, 1] #第一种,比较相邻两个值,若相同,则del其中一个,逐个遍历,直到没有重复的。 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()是一个生成器类型,需要使用list转换成列表 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列表去除相邻重复相等数据(只保留一个)
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] 得到的就是要比较的前后数据之后,你就可以轻松地做玩转相邻元素啦)
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,然后再执行后面的步骤
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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。