我有一个像这样的列表列表:
i = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]]
我想获得一个包含" unique"的列表。列表(基于其元素),如:
o = [[1, 2, 3], [2, 4, 5]]
我无法使用set()
,因为列表中有不可浏览的元素。相反,我这样做:
o = []
for e in i:
if e not in o:
o.append(e)
有更简单的方法吗?
答案 0 :(得分:43)
您可以创建一组元组,由于您提到的不可清除元素,因此无法使用一组列表。
>>> l = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]]
>>> set(tuple(i) for i in l)
{(1, 2, 3), (2, 4, 5)}
答案 1 :(得分:6)
i = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]]
print([ele for ind, ele in enumerate(i) if ele not in i[:ind]])
[[1, 2, 3], [2, 4, 5]]
如果您认为[2, 4, 5]
等于[2, 5, 4]
,那么您需要进一步检查
答案 2 :(得分:4)
您可以将每个元素转换为元组,然后将其插入集合中。
以下是您的示例中的一些代码:
tmp = set()
a = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]]
for i in a:
tmp.add(tuple(i))
tmp
将是这样的:
{(1, 2, 3), (2, 4, 5)}
答案 3 :(得分:1)
这是另一种方法:
I = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]]
mySet = set()
for j in range(len(I)):
mySet = mySet | set([tuple(I[j])])
print(mySet)