запустить пока l oop пока булево условие верно - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть массив 2D numpy (400x400), и хотя в этом массиве есть нули, я хочу запустить некоторое время l oop, пока после нескольких итераций все они не будут удалены. Поэтому в блоке while я удаляю некоторые нули в каждой итерации. Начиная с здесь у меня отрывается код, чтобы проверить, есть ли в моем массиве все еще нули:

check = 0 in array

Возвращает либо «True», либо «False» и работает. Теперь я хочу использовать это в начале while-l oop, и я ожидал, что он будет работать следующим образом:

while 0 in array == True:
    'do sth.'

Вместо этого я получаю следующую ошибку:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Я могу сделать обходной путь, когда в конце каждого while-l oop я записываю результат 'check = 0 в массиве' в другую переменную и проверяю эту переменную в начале while l oop, но Я думаю, что должен быть лучший способ.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

Python анализирует это как

while 0 in (array==True):

, где, конечно, вы имеете в виду

while (0 in array) == True:

, что, однако, лучше написано

while 0 in array:

Python условные выражения управления потоком уже неявно преобразуют каждое выражение в значение «истинность», которое либо True, либо False. Подробнее Что такое Истина и Ложь? Чем он отличается от True и False?

0 голосов
/ 02 февраля 2020

Если я правильно понял ваш вопрос, вы хотите, чтобы вы:

array = [[20,0],[11, 1]]
count = 0 
while count < len(array): 
    if 0 in array[count]: 
        print("Found zero")
    count += 1

Вывод:

[20, 0]
Found zero
[11, 1]
...