Как составить список списков

У меня есть список таких списков:

i = [[1, 2, 3], [2, 4, 5], [1, 2, 3], [2, 4, 5]]

Я хотел бы получить список, содержащий "уникальные" списки (на основе их элементов), например:

o = [[1, 2, 3], [2, 4, 5]]

Я не могу использовать set(), поскольку в списке есть недопустимые элементы. Вместо этого я делаю это:

o = []
for e in i:
  if e not in o:
    o.append(e)

Есть ли более простой способ сделать это?

Ответ 1

Вы можете создать набор кортежей, набор списков невозможен из-за не хэшируемых элементов, как вы упомянули.

>>> 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)}

Ответ 2

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], вам нужно будет сделать дополнительные проверки

Ответ 3

Вы можете преобразовать каждый элемент в кортеж, а затем вставить его в набор.

Вот пример кода с вашим примером:

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)}

Ответ 4

Вот еще один способ сделать это:

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)