Просматриваем список, чтобы найти, какие элементы, если таковые имеются, повторяются более X раз, затем возвращаем эти элементы

#python-3.x

#python-3.x

Вопрос:

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

 my_list = ['2', '5', '7', '7', '5']
  

Мне нужно иметь возможность проверить, повторяется ли какой-либо элемент в списке X раз, и если да, то какой (и). Например, я хотел бы проверить, повторяются ли какие-либо (и какие) элементы (2) раза в приведенном выше списке, и в этом случае я ожидал бы:

 5, 7 # this can be in the form of a list, strings, or anything else.
  

Что я пробовал:

Просмотрев некоторые предыдущие сообщения на StackExchange, я сначала пошел дальше и использовал collections-counter (не уверен, что это хороший подход), вот так:

 repetition = collections.Counter(my_list)
  

Что это возвращает, так это словарь, например:

 {'5': 2, '7': 2, '2': 1}
  

Теперь мне все еще нужно проверить, какие элементы повторяются дважды. После еще нескольких поисков я закончил с этим:

 def any(dict):
    repeating = []
    for element in dict.values():
        if element == 2:
            (...)
  

Однако я не уверен, как продолжить работу с этим кодом. Похоже, я могу получить только количество повторений в этом ‘2’ (т. Е. значение из словаря), но я не могу найти простой способ получения ключей, которые имеют значение 2.

Есть ли простой способ сделать это? Или мне следует попробовать другой подход?

Спасибо.

Ответ №1:

Вам нужно перебрать элементы словаря, чтобы у вас были и ключ, и значение:

 repeating = [key for key, value in repetition.items() if value >= 2]
  

Здесь я использовал понимание списка для выполнения цикла; выбираются все ключи, имеющие значение 2 или выше.

ДЕМОНСТРАЦИЯ:

 >>> from collections import Counter
>>> my_list = ['2', '5', '7', '7', '5']
>>> repetition = Counter(my_list)
>>> [key for key, value in repetition.items() if value >= 2]
['5', '7']
  

Комментарии:

1. Извините, один последующий вопрос. Если бы я хотел, чтобы код возвращал не только ключ, но и значение в словаре. Итак, вместо того, чтобы переходить ['5','7'] к вашей демонстрации, мы бы искали {('5':2),('7':2)] ; есть ли простой способ сделать это с пониманием списка?

2. Думаю, я понял: repeating = {repetition[key] for key, value in repetition.items() if value >= 2}

3. Хорошо, наконец-то понял: {key: value for key, value in repetition.items() if value == 2}