Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何统一对象列表?_Python - Fatal编程技术网

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

如何在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(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))]