Why am I getting a "TypeError: object of type 'int' has no len()" on a set?

Why am I getting a "TypeError: object of type 'int' has no len()" on a set?

我收到一个 TypeError,说 'int' 类型的对象在 运行 集合上的 while 循环时没有 len()。

import random
l = random.sample(range(100), 20)

s = set()
print(s) 
print(len(s))
while len(s) < 4:
    s = random.choice(l)

我从 print 语句(set()0)得到了正确的输出,但是当它到达 while 循环时出现了前面提到的 TypeError。

那是因为您的 while 循环正在将 s = random.choice(l) 处的值切换为整数。参见:

import random
l = random.sample(range(100), 20)

s = set()
print(s) 
print(len(s))
while len(s) < 4:
    s = random.choice(l)
    print(s)

这个returns:

set()
0
50

然后给你类型错误。所以你得到错误是因为 s 最初是一个集合,然后它被切换到 int 并通过 while 循环返回并且没有 len

您需要将结果添加到 set,否则您只是将 set 重新分配给 random.choice 的结果,这是一个 int :

while len(s) < 4:
    s.add(random.choice(l))