дан список списков:Python: уникальность в списке списков
L = [[1,2,3], [3,4,5], [1,2,3]]
как получить список, где каждый список уникален:
L = [[1,2,3], [3,4,5]]
благодаря
дан список списков:Python: уникальность в списке списков
L = [[1,2,3], [3,4,5], [1,2,3]]
как получить список, где каждый список уникален:
L = [[1,2,3], [3,4,5]]
благодаря
Если вы не» t заботиться о порядке подписок:
In [11]: list(map(list, set(map(tuple, L))))
Out[11]: [[3, 4, 5], [1, 2, 3]]
. Еще лучше, вы должны просто перейти к использованию наборов кортежей в качестве структуры данных.
Адаптация этого для сохранения порядка: 'sorted (map (list, set (map (tuple, L))), key = L.index)' –
@FJ: Хороший трюк. – NPE
Не самый эффективный метод, но он лаконичен. –
Немного смешалось, но как насчет этого?
[list(el) for el in set(tuple(el) for el in L)]
Это работает, потому что списки нельзя сравнивать друг с другом, но кортежи могут. Сообщение об ошибке дает его прочь, если вы попытаетесь сразу сделать набор из списка списков:
unhashable type: 'list'
Осторожно, 'list' можно сравнить друг с другом' [1] == [1] 'работает отлично. 'list' не хешируются, но поскольку они являются изменяемыми объектами. – mgilson
Да, это неправильно. К счастью, вы можете больше зависеть от сообщения об ошибке Python –
L = [[1,2,3], [3,4,5], [1,2,3]]
newlist = []
for item in L:
if item not in newlist:
newlist.append(item)
Это будет работать, но может быть немного неэффективным, когда 'L' является большим, потому что каждый раз ему приходится сканировать все' newlist' для каждого 'item' в' L' , – DSM
Вы можете преобразовать в набор кортежей, а затем вернуться к списку.
L = [[1,2,3], [3,4,5], [1,2,3]]
setL = set(tuple(i) for i in L)
newL = list(list(i) for i in setL)
print newL
[[3, 4, 5], [1, 2, 3]]
Что вы пробовали уже? Как вы определяете уникальность? Является ли '[1,2,3]' таким же, как '[3,2,1]'? – thegrinner
Большинство решений для составления списков содержат только уникальные элементы, которые должны одинаково хорошо работать для списков списков. – drewmm
@thegrinner да, я уже пробовал и искал google, и поэтому для ответа, который я ничего не нашел – Mermoz