Как прекратить выполнение блока else при поиске в массиве в python - PullRequest
0 голосов
/ 22 октября 2019

Вот часть кода: -

arr=[1,2,3,4,5,6,1,2,3,4,5,6]

и скажите, что я хочу найти 5 и напечатать его индекс.

x=Number to be searched 
for i in range(len(arr)):
    if x==arr[i]:
        print("Found at",i)
else:
    print("Not found")

Вывод выглядит следующим образом: -

Found at 4
Found at 10
Not found

Мотыга, чтобы избавиться от последней строчки? Не должно быть напечатано, поскольку 5 присутствует в обр! Примечание: я только начал изучать Python несколько дней назад, поэтому извините, если это тривиальный вопрос, но я не могу понять причину его печати. ​​

1 Ответ

1 голос
/ 22 октября 2019

Вы не можете использовать else: здесь, потому что for:...else: выполняет else ветвь , когда вы достигаете конца цикла . Вы можете предотвратить это только с помощью break в цикле for, чтобы он не достиг конца. Вы можете t use break` здесь, потому что вы хотите показать все соответствующие значения.

У вас есть два варианта:

  • Использовать переменную флагапомнить, что вы нашли совпадения;при совпадении установите его на True:

    found = False  # flag variable, defaulting to 'nothing found'
    for i in range(len(arr)):
        if x==arr[i]:
            print("Found at", i)
            found = True  # found at least one match, set the flag to true
    if not found:
        print("Not found")
    
  • Соберите все индексы в список сначала перед печатью. Если список пуст, вы знаете, что ничего не нашли:

    indices = []
    for i in range(len(arr)):
        if x==arr[i]:
            indices.append(i)
    
    if indices:
        for index in indices:
            print('Found at:', index)
    else:
        print("Not found")
    

Этот последний вариант может быть достигнут более кратко с использованием единого списка и с enumerate()функция :

indices = [i for i, value in enumerate(arr) if value == x]
if indices:
    for index in indices:
        print("Found at", index)
else:
    print("Not found")
...