Сравнение элементов списка символов с вводом символов

#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]))