在 python 中获取一组二维列表

Get a set of 2d list in python

我有如下列表

t=[[1, 7], [3, 7], [1, 7], [5, 8], [3, 7]]

我需要从中得到一个集合,这样输出就会像

t=[[1, 7], [3, 7], [5, 8]]

我尝试使用 t=set(t) 但没有成功

如果不在意顺序,可以先用map()函数把里面的lists转成tuples,再转成set,然后回到 list .

例子-

>>> t=[[1, 7], [3, 7], [1, 7], [5, 8], [3, 7]]
>>> t = list(set(map(tuple,t)))
>>> t
[(3, 7), (5, 8), (1, 7)]

问题是列表是可变的,因此不能从中创建一个集合,因为它们可能会改变。因此,您想使用不可变的元组。因此你可以使用:

list(set([tuple(ti) for ti in t]))

如果您确实关心顺序:

def func(items):
    seen = set()
    for item in items:
        item = tuple(item)
        if item not in seen:
            yield item
            seen.add(item)

或者您只是子类化 list 并重写 append 这样一开始就不会添加重复项:

class T(list):
    def append(self, item):
        if item not in self:
            list.append(self, item)

可以这样使用:

>>> t = T([[1, 7], [3, 7], [5, 8]])
>>> t
[[1, 7], [3, 7], [5, 8]]
>>> t.append([1, 7])
>>> t
[[1, 7], [3, 7], [5, 8]]

集合只能包含不可变元素。 list 是可变类型,您需要将项目转换为不可变类型,例如tuple:

set(map(tuple, t))