Есть ли функция для поиска чисел в списке строк без повторения 2 раза? - PullRequest
0 голосов
/ 03 апреля 2020

Представьте себе несколько карточных игр в списке, как показано ниже:

list1 = ['1 of Spades', '1 of Diamonds', '2 of Hearts']

Я пробовал что-то подобное, но это не сработало:

popped = [s for s in list1 if s[:1] in list1.count(s[:1]) > 1]

Как можно Я получаю все карты одинаковой стоимости и удаляю их без зацикливания 2 раза? В этом примере должны появиться оба «1 из пиков» и «1 из бриллиантов».

1 Ответ

0 голосов
/ 03 апреля 2020

Предполагая, что вы стремитесь избежать вложенных циклов и ищете решение O (n), вы можете использовать словарь счетчиков, чтобы определить номер каждого значения карты и отфильтровать список на основе этого впоследствии:

list1 = ['1 of Spades', '1 of Diamonds', '2 of Hearts']

from collections import Counter

counts = Counter( c.split(" ",1)[0] for c in list1 )
list1  = [ c for c in list1 if counts[c.split(" ",1)[0]] == 1 ]

вывод:

print(list1) 

# ['2 of Hearts']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...