我有一个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()
答案 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)