Вы можете использовать collections.Counter.
from collections import Counter
Затем, чтобы получить объекты Counter (по сути, мультимножества), которые подсчитывают, сколько раз каждый символ встречается в слове и во введенных разрешенных символах:
word_counter = Counter(word)
characters_counter = Counter(characters)
Чтобы проверить, что слово является подмножеством символов, и напечатать, если да, выполните
if word_counter & characters_counter == word_counter:
print(word)
(& означает пересечение)
Очень просто. Быстро, потому что он использует стандартные библиотечные функции, такие как sh карты, которые оптимизированы и, вероятно, написаны на C, вместо дорогостоящих многоуровневых циклов списков, а также поиска, добавления и удаления. У него также есть дополнительное преимущество, заключающееся в том, что если пользователь вводит одни и те же символы несколько раз, то он позволяет слова с этим символом повторяться несколько раз, вплоть до того, сколько раз пользователь ввел его.
Например, если пользователь ввел «i, i, c, c, l, e», тогда слово «сосулька» все равно будет напечатано, тогда как если бы он ввел «i, i, c, z, l, e», тогда «сосулька» не будет напечатана.
from collections import Counter
# input characters, get words...
characters_counter = Counter(characters)
for word in word_list:
word_counter = Counter(word)
if word_counter & characters_counter == word_counter:
print(word)
Готово!