Просто для удовольствия, это другой способ сделать это неизменно, используя карту перевода.
Если вы хотите, чтобы заменить все, что было в ltrFound
, что было бы легко:
tr = str.maketrans(ltrFound, '*' * len(ltrFound))
print(reveal.translate(tr))
Но вы хотите сделать наоборот, заменить все, что это не в ltrFound
. И вы не хотите строить таблицу переводов всех 100K + символов, которые не являются s
. Так что ты можешь сделать?
Вы можете построить таблицу 6 символов, которые не s
но находятся в reveal
:
notFound = ''.join(set(reveal) - set(ltrFound)) # 'adoprw'
tr = str.maketrans(notFound, '*' * len(notFound))
print(reveal.translate(tr))
выше использует Python 3.x; для 2.x, maketrans
является функцией в модуле string
, а не классом класса str
(и есть еще несколько отличий, но они здесь не имеют значения). Итак:
import string
notFound = ''.join(set(reveal) - set(ltrFound)) # 'adoprw'
tr = string.maketrans(notFound, '*' * len(notFound))
print(reveal.translate(tr))
Вы можете добавить ввод и ожидаемый выход? –
Перечисления списков не предназначены для ситуаций с побочными эффектами, но то, что вы ищете здесь, является полностью побочным эффектом (поскольку вы не создаете список, который хотите сохранить). Что не так с вашим циклом for и почему вы хотите заменить его пониманием? –
См. [Здесь] (http://stackoverflow.com/questions/5753597/is-it-pythonic-to-use-list-comprehensions-for-just-side-effects), [здесь] (http: // stackoverflow .com/questions/8068251/why-is-python-list-assrehension-иногда-нахмуренный) и [здесь] (http://stackoverflow.com/questions/8695488/proper-use-of-list-comprehensions- python) для получения дополнительных побочных эффектов. –