在while循环中列出逻辑

时间:2016-05-19 14:23:50

标签: python python-3.x

您好我有一个真假值列表,

visited =[True, False, True, False]

我不确定它是否可能,但是当列表为空或者访问时没有更多False值id喜欢结束While循环时,我喜欢在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

我喜欢更改false值以及在while循环中停止循环长度达到0。当我在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

连续循环。 任何建议都会非常好,谢谢你

2 个答案:

答案 0 :(得分:4)

在评论中澄清后:

考虑这个例子:

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)的条件。

答案 1 :(得分:1)

您的解决方案似乎过度设计或问题描述缺乏关键点。

如果您只想将所有值设置为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)