Python While 循环问题
我现在有点懵。我想从用户数据库里获取所有用户,但只想循环处理其中的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