即使循环应该停止,我的循环变量也会重置为true

时间:2019-06-22 22:42:53

标签: python python-3.x while-loop

我有一个while循环,在以前的python版本中运行良好。现在,循环变量似乎已重置。 请记住,我只是出于爱好而这样做,因此,如果有另一种/更好的方法来达到目标​​,那就放心了。

因此,此代码包含一个数字列表,并将其与另一个列表进行比较。如果num中的numbers在其他列表中不存在,则将其删除。并重新启动该过程。问题在于,一旦列表匹配,循环变量仍然会重置为True,并且它的代码会陷入循环中:

loop = True
def remove_games():
    for num in numbers:
        loop = False
        if int(num) in df.game_number.values:
            continue
        else:
            idx = numbers.index(num)
            numbers.remove(num)
            games.pop(idx)
            loop = True
            num=''
            break

while loop:
    remove_games()

2 个答案:

答案 0 :(得分:0)

\\(.*?\\)(*SKIP)(*FAIL)|<=中的loop是局部变量。我不确定在哪个版本的Python中可以工作,但是在remove_games中声明global loop应该会给您想要的行为。

另一方面,在返回值足够的情况下使用全局变量并不理想。所以我会做这样的事情:

remove_games

答案 1 :(得分:0)

一种方法是使用difference of sets

nums = set(map(int, numbers))
nums -= df.game_number

这里唯一的潜在问题是set不是有序集合。您可以遍历nums,但是顺序是任意的。如果数字最初具有重要的顺序,则可以使用dict代替set,直到CPython 3.6(在3.7中它仍然是“实现细节”,在3.7中已被完全采用)。对于以前的版本,您可以使用collections.OrderedDict

nums = dict.from_keys(map(int, numbers))
numbers = list(nums.keys() - df.game_number)