我有一个如下列表
t=[[1, 7], [3, 7], [1, 7], [5, 8], [3, 7]]
我需要设置一个,所以输出就像
t=[[1, 7], [3, 7], [5, 8]]
我尝试使用t=set(t)
,但它不起作用
答案 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))