Я делаю небольшую разработку, и мне нужно иметь позицию повторяющихся элементов списка.
Для этого я сделал следующее:
FDE = [1,2,3,4,4,3]
for k in range(6):
m=[i for i,x in enumerate(FDE) if x==FDE[k]]
print(m)
Результат, который показывает мне экран:
м=[2,5]
Короче говоря, он ищет только повторяющийся, '3'
но не '4'
тот, который также повторяется, в идеале он напечатает:
m=[2,3,4,5]
Есть несколько способов сделать это, один из них — использовать метод
count
, чтобы увидеть, встречается ли элемент в списке более одного раза. Это не самый эффективный, но краткий:Вылет из:
Версия:
Как я уже говорил вам, один из способов узнать значение, связанное с индексами, — это использовать словарь, в котором каждый уникальный повторяющийся элемент является его ключом, а список с индексами, в которых он найден, является его значением.
Опять же, есть несколько вариантов, относительно простой — использовать
collections.defaultdict
. Мы создаем словарь, в котором уникальные элементы хранятся как ключи, а их индексы — как значения, затем мы сохраняем те пары, которые имеют более одного индекса:Вылет из:
Вот модификация отличного решения, предоставленного @FJSevilla, которое может работать немного быстрее, поскольку оно удаляет цикл
for
в обмен на создание объектаCounter
из списка, который получает словарь с количеством вхождений (значений) для каждого элемента список (ключи).На выходе вы получаете как словарь с индексами для каждого элемента, так и список с индексами повторяющихся элементов.