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,然后再执行后面的步骤

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:725638078
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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

结尾给大家推荐一个非常好的学习教程,希望对你学习Python有帮助!

Python基础入门教程推荐:更多Python视频教程-关注B站:Python学习者
https://www.bilibili.com/video/BV1LL4y1h7ny?share_source=copy_web

Python爬虫案例教程推荐:更多Python视频教程-关注B站:Python学习者
https://www.bilibili.com/video/BV1QZ4y1N7YA?share_source=copy_web

Python语言中,实例化指的是使用类定义的构造函数创建一个对象的过程。类是一种自定义数据类型,允许我们定义一些具有特定属性和方法的对象。通常情况下,我们会创建多个实例对象,但是其中可能会存在相同的对象,这时我们就需要将他们Python提供了多种方法进行列表。 首先,可以使用集合(set)来实现列表。集合是Python中一种无序的、可变的序列,其中的元素不允许复。我们可以将列表通过set()函数进行转换,再将集合通过list()函数转换为列表。例如: ``` class Student(): def __init__(self, name, age): self.name = name self.age = age s1 = Student('Tom', 18) s2 = Student('Lucy', 19) s3 = Student('Tom', 18) students = [s1, s2, s3] students = list(set(students)) ``` 这种方法可以实现简单的列表,但是需要注意的是,需要保证类的__eq__()方法和__hash__()方法被正确地载,否则会出现无法正确比较实例的情况。 另外一种实现方式是通过lambda表达式进行比较。我们可以使用sorted()函数对列表进行排序,再使用lambda表达式对相邻元素进行比较,过滤掉复的元素。例如: ``` class Student(): def __init__(self, name, age): self.name = name self.age = age s1 = Student('Tom', 18) s2 = Student('Lucy', 19) s3 = Student('Tom', 18) students = [s1, s2, s3] students = sorted(students, key=lambda x: (x.name, x.age)) students_new = [] for i in range(len(students)): if i == 0 or students[i].name != students[i-1].name or students[i].age != students[i-1].age: students_new.append(students[i]) students = students_new ``` 这种方法可以应对更加复杂的载情况,但是需要注意排序的效率问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值