在Python中获取一个二维列表。

4
我有一个如下所示的列表:
t=[[1, 7], [3, 7], [1, 7], [5, 8], [3, 7]]

我需要将这个转换为一个set,以便输出如下:
t=[[1, 7], [3, 7], [5, 8]]

我试过使用t = set(t)但是它没起作用。


1
将项目转换为元组并将它们传递给 OrderedDict.fromkeys,最后再将元组键转换为列表即可。(如果顺序很重要) - Ashwini Chaudhary
4个回答

10
如果您不关心顺序,可以首先使用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)]

正是我所寻找的。 - Asce4s
很高兴它对你有用,建议你接受答案,选择最好的答案会帮助那些有类似问题的人和整个社区。 - Anand S Kumar

3
问题在于,lists是可变的,因此不能将它们转换为set,因为它们可能会发生改变。因此,您需要使用不可变的tuples。因此,您可以使用以下代码:
list(set([tuple(ti) for ti in t]))

1

如果您关心顺序:

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

或者你可以简单地继承列表并重写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]]

1

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

set(map(tuple, t))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接