#python-3.x
Вопрос:
У меня есть вопрос, у меня есть список персонажей, похожий на этот:
letras_lista = ['gcjcf', 'afadd', 'ibfah', 'ihdha', 'cdigc', 'kaaci', 'ihiga', 'jbjji', 'hbjjj', 'bcdjg', 'ieika']
И у меня есть ввод из двух символов, подобный этому:
orden = 'ah'
Для этого я создал этот код:
cont = 0
for i in letras_lista:#lista que puse de ejemplo
lista = [i]
for x in lista:
if orden in x:#patron a comparar
cont =1
print(cont)
Не могли бы вы сказать мне, есть ли способ оптимизировать код, я новичок в программировании и не знаю многих способов сделать это.
Заранее большое вам спасибо
Комментарии:
1. Удалите
lista = [i]
, удалите внутренний цикл и сравните непосредственно сi
Ответ №1:
Очень простой способ состоит в том , чтобы воспользоваться тем фактом, что bool
это подкласс int
, и суммировать по условию:
cont = sum(orden in x for x in letras_lista)
Вот пошаговый способ перейти от вашей реализации к моей:
Во-первых, обратите внимание, что ваш внутренний цикл повторяется по списку длиной 1. И не только это, но вы искусственно составили этот список lista
. Это означает, что вы можете избавиться lista
и от внутреннего цикла, и просто запустить условный:
cont = 0
for i in letras_lista:
if orden in i:
cont = 1
Теперь обратите внимание, что логическое значение orden in i
эквивалентно тому, к чему вы хотите добавить cont
. Так True == 1
как в python, и False == 0
, вы можете написать
cont = 0
for i in letras_lista:
cont = (orden in i)
Надеюсь, теперь ясно, как вы можете поместить логическое условие непосредственно в sum
вызов.
Ответ №2:
print(len([i for i in letras_lista if orden in i]))