логика списка в цикле while

Привет, у меня есть список с истинными ложными значениями,

visited =[True, False, True, False]

Я не уверен, возможно ли это, но id любит использовать логику списка в цикле while, когда список пуст или посещен больше не имеет значений False. Id хотел завершить цикл while. Вот моя попытка, похоже, бесконечный цикл. И я не могу изменить ложные значения, когда сталкиваюсь с одним, вот мой код

class mass:

    def __init__(self):
        visited =[True, False, True, False]
        self.x = 0
        while len([self.x for self.x, values in enumerate(visited) if visited[self.x] == False ]) > 0:
            print(self.x)
            visited[self.x] = True
            print(visited)
            self.x = 0
c = mass()
c

Я хотел бы изменить ложные значения, а также остановить цикл, если длина достигает 0 в цикле while. Когда я делаю это в консоли Python, я получаю вывод

>>> [x for x, values in enumerate(visited) if visited[x] == False ]
[1, 3]
visited =[True, True, True, True]

Тогда, если я сделаю

>>> visited =[True, True, True, True]
>>> [x for x, values in enumerate(visited) if visited[x] == False ]
[]

Итак, я попробовал

>>> print(len([x for x, values in enumerate(visited) if visited[x] == False ]))
0

Что заставляет меня думать, что я могу сделать

while  len([x for x, values in enumerate(visited) if visited[x] == False ]) > 0

Которая зацикливается непрерывно. Любой совет был бы отличным, спасибо


person Brett    schedule 19.05.2016    source источник
comment
Ваше намерение неясно. Вы хотите, чтобы цикл while прерывался, когда в списке нет значений False?   -  person DeepSpace    schedule 19.05.2016
comment
Да, это то, что я пытаюсь сделать, но я не могу изменить ложные значения. Это проблема   -  person Brett    schedule 19.05.2016


Ответы (2)


После того, как вы уточнили в комментариях:

Рассмотрим этот пример:

import random
li = [False, False, False]

while not all(li):
    print('here')
    i = random.randint(0, 2)
    li[i] = True

Этот код будет печатать «здесь» произвольное количество раз, пока все значения li не станут True.

Ключевым моментом в этом ответе является условие цикла while, while not all(li).

person DeepSpace    schedule 19.05.2016
comment
Я тоже думал об использовании all, но для прямого решения без случайных значений я предпочел классический цикл for. - person Matthias; 19.05.2016

Ваше решение кажется чрезмерно продуманным или в описании проблемы отсутствуют важные моменты.

Если вы просто хотите установить для всех значений True, вы можете сделать следующее.

visited = [True, False, True, False]
for index in range(len(visited)):
    visited[index] = True
print(visited)

Если вы хотите изменить значение только в том случае, если оно не True, сделайте следующее:

visited = [True, False, True, False]
for index, value in enumerate(visited):
   if not value:    
       visited[index] = True
print(visited)
person Matthias    schedule 19.05.2016