Python 如何统一对象列表?
如何在Python中统一对象列表,保存顺序Python 如何统一对象列表?,python,Python,如何在Python中统一对象列表,保存顺序 def Test(object): def __init__(self,p1,p2): self.p1 = p1 self.p2 = p2 lst = [Test(1,2), Test(2,3), Test(1,2)] 双对象uniq,如果 Test1.p1 == Test2.p1 and Test1.p1 == Test2.p2 你可以做一些让人感觉不舒服的事情,但应该适合你: tmpset = set(l
def Test(object):
def __init__(self,p1,p2):
self.p1 = p1
self.p2 = p2
lst = [Test(1,2), Test(2,3), Test(1,2)]
双对象uniq,如果
Test1.p1 == Test2.p1 and Test1.p1 == Test2.p2
你可以做一些让人感觉不舒服的事情,但应该适合你:
tmpset = set(lst)
uniqsorted = list(tmpset).sort()
使用:
印刷品
1 2
2 3
我正在改变我的答案以维持秩序。您可以定义正好相等(通过添加
\uuuuu eq\uuuu
方法)并将项目逐个添加到新列表中,同时检查它们是否已经存在:
class Test(object):
def __init__(self,p1,p2):
self.p1 = p1
self.p2 = p2
def __eq__(self, ot):
return self.p1 == ot.p1 and self.p2 == ot.p2
lst = [Test(1,2), Test(2,3), Test(1,2)]
new_lst = []
for x in lst:
if x not in new_lst:
new_lst.append(x)
类测试(对象):
定义初始化(self,p1,p2):
self.p1=p1
self.p2=p2
定义(自身、其他):
返回(other.p1==self.p1)和(other.p2==self.p2)
定义散列(自我):
返回(self.p1或者,使用一个生成器跟踪它已经看到的关键点,使用一组:
def unique_values(iterable):
seen = set()
for value in iterator:
key = (value.p1, value.p2)
if key not in seen:
yield value
seen.add(key)
lst = list(unique_values(lst))
作为列表理解的粉丝,我必须分享这篇文章:
seen = set()
uniq_list = [t for t in lst if (t.p1, t.p2) not in seen and not seen.add((t.p1, t.p2))]
“(t.p1,t.p2)不可见”将适用于新出现的情况,因此仅在新出现时才继续下一部分
“not seen.add((t.p1,t.p2))”始终为True,并将元素添加到seen
定义唯一性?是两者中的p1
相同还是p2
?@AamirAdnan基于上下文,我假设他想要一个只包含唯一元素的有序列表。将两个集合转换为集合p1=set(p1)
然后p1=p1.union(p2)
将给出一个包含所有唯一项的集合。然后对其进行排序。等等,这不会保存orderCopied from。现在它保存了,不,我没有复制:)我只是考虑了相同的解决方案,不确定如何构建哈希值。根据预期值,移动p1的值可能会起作用。不,不会。但在他编辑这个问题之前,他到底想问什么还不清楚。
def unique_values(iterable):
seen = set()
for value in iterator:
key = (value.p1, value.p2)
if key not in seen:
yield value
seen.add(key)
lst = list(unique_values(lst))
seen = set()
uniq_list = [t for t in lst if (t.p1, t.p2) not in seen and not seen.add((t.p1, t.p2))]