Просмотрите список и проверьте, нахожусь ли я в конце списка - PullRequest
3 голосов
/ 18 июня 2020

У меня есть список строк:

animals = ["cat meow ", "dog bark"]

И я хочу проверить, содержит ли каждая строка слово "cow", которого, очевидно, нет в моем приведенном выше списке. Я пытаюсь написать оператор if else, который проверяет, нахожусь ли я в конце списка, и если корова не найдена print "not found ".

Приведенный ниже код печатает не найден для каждого элемента, который не содержит строка, но я хочу напечатать «не найдено» только один раз, когда я перебираю весь свой список в конце, но я не знаю правильный синтаксис.

animals = ['dog bark' , 'cat meow ']
for pet in animals:
  if 'cow' in pet:
    print('found')
  else:
    print('not  found') 

Ответы [ 5 ]

6 голосов
/ 18 июня 2020

Похоже, это хороший вариант использования Python функции any () , которая возвращает True, если какой-либо из элементов в итерации верен.

animals = ['dog bark' , 'cat meow ']
has_cow = any('cow' in a for a in animals)
print('found' if has_cow else 'not found')

Но, если вы очень хотите использовать for l oop, вы можете либо использовать переменную flag, чтобы отслеживать, нашли ли вы элемент внутри l oop, либо воспользоваться преимуществами Python поистине странная конструкция for-else (предложение else выполняется, если l oop не был прерван). За более чем дюжину лет программирования Python я никогда не использовал for-else, так что на самом деле это просто языковое любопытство, и я категорически против этого. Но это работает для этой конкретной c проблемы!

for a in animals:
    if 'cow' in a:
        print('found')
        break
else:                      # WTF!?!  Don't do this, folks.
    print('not found')
5 голосов
/ 18 июня 2020
animals = ['dog bark' , 'cat meow ']

print('found' if any('cow' in pet for pet in animals) else 'not found')

Работает и с переменными;

result = 'found' if any('cow' in pet for pet in animals) else 'not found'
1 голос
/ 18 июня 2020

Большинство языков программирования позволяют использовать операторы else с условными операторами if только . Однако в Python оператор else может также использоваться с для циклов, с которыми большинство из нас не знакомо. Обычно for / else используется для запуска al oop, когда мы ищем элемент. Например:

lis=[1,2,3]
for i in lis:
    if i==1:
        print("1 found in list.")
        break
else:
    print("1 is not in list.")

Этот код напечатает: 1 found in list. Когда l oop запускается, i принимает значения из списка, а оператор if проверит предоставленные условия, если условие истинно, будет выполнен оператор печати. После этого выполняется инструкция break , которая прерывает поток управления в коде. Оператор Break в Python используется для вывода управления из l oop, когда срабатывает какое-то условие.

Таким образом, код в вопросе можно правильно записать как:

animals=["dog bark","cat meow"]
for pet in animals:
    if 'cow' in pet:
        print("Found")
        break'
else:
    print("not found")

Это напечатает желаемый результат!

Надеюсь, это поможет!

1 голос
/ 18 июня 2020

Флаг пригодится в таких ситуациях

flag = False
animals = ['dog bark' , 'cat meow']
for pet in animals:
  if 'cow' in pet:
      print("Found")
      flag = True

if flag == False:
    print("Not found")

Он напечатает "Not Found"

Для animals = ['dog bark', 'cat meow', "cow moo"] он напечатает "Found".

0 голосов
/ 18 июня 2020

Вы можете добиться, чтобы не найденный отпечаток был напечатан один раз с помощью

animals = ['dog bark' , 'cat meow ']
for i, pet in enumerate(animals):
  if 'cow' in pet:
    print('found')
    break
  elif i+1 == len(animals):
    print('not  found') 

или в одной строке

print("found" if [i for i in animals if "cow" in i] else "not  found")

Этот код напечатает найденный и выйдет из l oop если в одном из элементов else есть корова, в последнем элементе будет проверяться корова, отсутствующая в элементе, и будет напечатано «не найдено».

...