消除重复列表?

2024-04-20 03:30:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个集合,其中应该包含一堆独特的列表项: 这就是我试图定义它的方式。你知道吗

results = set([], key= self.comparator)

这是比较器函数

def comparator(self, l1, l2):
    if len(l1) != len(l2):
        return -1
    i = 0
    while i < len(l1):
        if l1[i] != l2[i]:
            return -1
        i += 1
    return 0

这会引发以下错误

TypeError: set() does not take keyword arguments

显然set构造函数不接受密钥, 如果我没有传递密钥,那么我会得到以下错误

TypeError: unhashable type: 'list'

因此,我试图消除重复列表的方法是行不通的。我怎么用Python来做呢。你知道吗


Tags: selfl1列表lenreturnif定义错误
2条回答

如您所知,set不接受这样的密钥。不过,它确实希望您将它作为项目带来的任何东西都是“可哈希的”,这实际上意味着它有一个__hash__()方法。list没有工作哈希,从这个示例可以看出:

a = 'a'
a.__hash__() # prints -8546348471933684759
a = [1,2,3]
a.__hash__() # will throw TypeError

如果要定义一个新类,它的行为类似于一个列表,但基于它的值有一个唯一的哈希,那么可以对它使用set。你知道吗

class mylist(list):
    def __hash__(self):
        return sum(item.__hash__() for item in self)

a = mylist([1,2,3])
b = mylist([1,2,3])
c = mylist([4,5,6])
unique_lists = set((a,b,c))
print(unique_lists) # prints {[1, 2, 3], [4, 5, 6]}

您可以将列表转换为元组以执行所需操作:

my_lists = [[1,2,3], [1,2], [1,2,3]]
tuples = [tuple(l) for l in my_lists]

print(set(tuples))

似乎达到了你所需要的。你知道吗

印刷品:

set([(1, 2), (1, 2, 3)])

相关问题 更多 >