我创建了一个列表列表,然后尝试使用set()获取列表的不同列表,但似乎我无法在集合上使用列表。
还有另一种方法可以通过一个表现良好的简洁陈述来实现这一目标吗?
CODE
x = [1,2]
y = [1,2]
z = [2,3]
xyz = []
xyz.append(x)
xyz.append(y)
xyz.append(z)
set(xyz)
错误
TypeError: unhashable type: 'list'
目标
xyz = [[1,2],[2,3]]
答案 0 :(得分:4)
如果您想保留订单并保留列表,可以使用生成器功能从列表中删除欺骗行为:
xyz = [x, y, z]
def remove_dupe_subs(l):
seen = set()
for sub in l:
tup = tuple(sub)
if tup not in seen:
yield sub
seen.add(tup)
xyz[:] = remove_dupe_subs(xyz)
或者使用利用事实set.add
的生成器表达式返回None:
seen = set()
xyz[:] = (seen.add(tup) or sub for sub, tup in zip(xyz, map(tuple, xyz)) if tup not in seen)
print(xyz)
答案 1 :(得分:2)
如果列表成员是可清除的,它将起作用
x = [1,2]
y = [1,2]
z = [2,3]
xyz = []
xyz.append(tuple(x))
xyz.append(tuple(y))
xyz.append(tuple(z))
print xyz
xyz_set = set(xyz)
print xyz_set
答案 2 :(得分:1)
这有点令人费解,但这将在一行中解决问题:
xyz=[list(x) for x in list(set((tuple(x),tuple(y),tuple(z))))]