列表内置函数len(x)以及while条件下出的问题题

关于9的循环并且剔除每轮的第九个
代码如下:
a=[x for x in range(1,51)]
b=[]
n=0
while len(b)<=20:
for x in a:
if x not in b:
n+=1
if n==9:
b.append(x)
n=0
c=[i for i in a if i not in b]
print(len(b),b)
print("淘汰的人的编号为",b)
print("留下的人的编号为",c)
问题:
为什么为len(b)<=20的条件下运行,得到的列表b的长度是22?不应该在20的时候就结束运行吗?
以及,如何修正代码,使得最终的len(b)=20?

len(b)==20的时候仍可能继续执行循环然后b里面还会append(x),若要len(b)==20停止在循环里面加一个if len(b) == 20: break即可