Python While 循环问题

1 投票
8 回答
1000 浏览
提问于 2025-04-16 21:24

我现在有点懵。我想从用户数据库里获取所有用户,但只想循环处理其中的10个(我省略了代码,没解释为什么我不直接从数据库里抓10个用户)。

users = User.objects.all()
i = 0
while i < 10:
    for user in users:
        if user.is_active:
            # do something
            i += 1

这导致了一个无尽的循环……我漏掉了什么愚蠢的细节吗?

8 个回答

1

在使用while循环时,条件判断会等到你遍历完所有用户之后才会进行。你可以把while循环去掉,改成在for循环的最后加一个if i >= 10: break,这样就可以了。

2

其实,这个不是无止境的,它只是把所有用户跑了10遍。

如果你想要前10个用户(不管他们是否活跃):

while i < 10:
    user = users[i]
    if user.is_active:
        # do something
    i += 1

如果你想要前10个活跃用户:

for user in users:
    if user.is_active:
        #do something
        i += 1
    if i >= 10:
        break
8

如果你想找出10个活跃用户,你需要想得更周到一些。

for user in itertools.islice((x for x in users if x.is_active), 10):
  # do something

撰写回答