#python #python-3.x #nested-lists
#python #python-3.x #вложенные списки
Вопрос:
Прошу прощения, я считаю, что это распространенный вопрос, но, похоже, не могу найти точный ответ для желаемого результата.
Я хотел бы возвращать ТОЛЬКО уникальные элементы в списке списков, основанных на одном элементе.
Пример;
List = [[1,2],[2,3],[1,4],[1,5],[6,3]]
Желаемый результат;
List = [[2,3],[6,3]]
Поскольку 1 существует как первый элемент в нескольких элементах списка, я бы хотел, чтобы все они игнорировались.
Есть ли простой способ сделать это?
Комментарии:
1. Каковы правила? Как вы узнаете, что нужно сохранить,
[2, 3]
а не[1, 2]
или[1, 4]
? Что вы имеете в виду «на основе первого элемента»? Что насчет первого элемента говорит нам, следует ли сохранить или выбросить другой элемент?2. @Code-Apprentice Если позволите, я думаю, что этот вопрос довольно ясен. Каждый кортеж с
1
в качестве первого элемента игнорируется, поскольку существует несколько подсписков с1
в качестве первого элемента.3. @Code-Apprentice это объясняется в вопросе: Поскольку 1 существует как первый элемент в нескольких элементах списка, я бы хотел, чтобы все они игнорировались .
2
и6
отображаются только в одной паре как первый элемент (индекс 0), поэтому они желательны
Ответ №1:
Может возникнуть соблазн использовать list.count
, но это сделает решение, использующее его, O (n ^ 2), если использовать наивно.
Решением O (n) было бы использование collections.Counter
:
from collections import Counter
nested_list = [[1,2],[2,3],[1,4],[1,5],[6,3]]
counter_map = Counter(sublist[0] for sublist in nested_list)
print(counter_map)
output = [sublist for sublist in nested_list if counter_map[sublist[0]] == 1]
print(output)
выводит
Counter({1: 3, 2: 1, 6: 1})
[[2, 3], [6, 3]]