如何制作一组列表

时间:2014-11-06 15:36:13

标签: python

我有一个像这样的列表列表:

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)

有更简单的方法吗?

4 个答案:

答案 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)