gpt4 book ai didi

python - 为什么底部打印顺序不正确?

转载 作者:行者123 更新时间:2023-12-01 09:25:20 25 4
gpt4 key购买 nike

第一次来这里,我正在准备我的软件开发和编程证书。通过伯克利扩展计划,我叔叔帮我买了几本编程书籍,以便在我正式注册和开始之前获得一些先机。

我决定扩展书中提供的一个示例,看看是否可以通过不同的途径创建与他们相同的结果。

长话短说,当我运行注释掉部分的顶行时,它会按顺序打印(0 1 2)。但是,当我运行未注释的第二部分时,它会打印 0 2 1。希望有人能为我澄清原因,我的第一个倾向是它与 unconfirmed_users.remove(user) 有关这只是新手的猜测^^;

    unconfirmed_users = [ 'anna', 'bryce', 'carmina',]
confirmed_users = []

#while unconfirmed_users:
#confirmed_user = unconfirmed_users.pop()
#print("Confirming user: " + confirmed_user.title())
#confirmed_users.append(confirmed_user)
#print("\nThe following users have been confirmed: ")
#for users in confirmed_users:
#print(users.title())


while unconfirmed_users:
for user in unconfirmed_users:
print("Confimring User: " + user.title())
unconfirmed_users.remove(user)
confirmed_users.append(user)
print("\nThe following users have been confirmed: ")
for users in confirmed_users:
print(users.title())

最佳答案

你正在做的事情可能看起来很明智,但Python将你的for循环翻译成这样:

i = 0
while i < len(unconfirmed_users):
user = unconfirmed_users[i]
# ...
unconfirmed_users.remove(user)
i += 1

因此,Python 在幕后读取列表的第一个元素 ('anna'),然后删除它,然后移动到修改后的列表的第二个元素 ('carmina',因为 'anna' 已被删除,现在 'bryce' 是第一个元素)。仅当外部没有过于聪明的 while 循环时,您的代码才会打印 'anna''carmina',它重复此迭代并选取您在 for 循环中第二次跳过的元素。

顺便说一句,您可能不应该在迭代列表时修改列表,除非您有充分的理由这样做。查看the definition of the for statement在文档中,特别是最后一段准确描述了这种情况。

关于python - 为什么底部打印顺序不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50458131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com