在 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))
我有如下列表
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))