在python中获取一组2d列表

时间:2015-06-25 14:33:51

标签: python arrays algorithm list set

我有一个如下列表

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

我需要设置一个,所以输出就像

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

我尝试使用t=set(t),但它不起作用

4 个答案:

答案 0 :(得分:3)

问题是列表是可变的,因此无法对它们进行设置,因为它们可能会发生变化。因此,您希望使用不可变的元组。因此,您可以使用:

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

答案 1 :(得分:2)

如果您不关心订单,可以先使用lists函数将内部tuples转换为map(),然后将其转换为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)]

答案 2 :(得分:0)

如果你关心订单:

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

或者您只是子类列表并覆盖追加,因此首先不能添加重复项:

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]]

答案 3 :(得分:0)

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

set(map(tuple, t))