为了账号安全,请及时绑定邮箱和手机立即绑定

在 for 循环中使用两个变量如何工作

在 for 循环中使用两个变量如何工作

精慕HU 2022-10-06 19:19:12
我开始阅读 python 文档。我最终得到了这样的声明:在迭代同一集合时修改集合的代码可能很难正确处理。相反,循环遍历集合的副本或创建新集合通常更直接:# Strategy:  Iterate over a copyfor user, status in users.copy().items():    if status == 'inactive':        del users[user]# Strategy:  Create a new collectionactive_users = {}for user, status in users.items():    if status == 'active':        active_users[user] = status我无法理解解决方案。这段代码是如何工作的?我的意思是我想到了使用一个变量来迭代一个列表,但是使用两个变量很难理解。来源:https ://docs.python.org/3/tutorial/controlflow.html#for-statements
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

此代码同时遍历用户和状态:如果用户状态为“非活动”,则程序将在第二个 for 循环中删除该用户 如果用户为“活动”,它将将此用户添加到活动用户字典中,当你想要要同时循环遍历字典的键值对,必须使用 dict.items() 方法,items() 方法允许您同时循环遍历每个字典元素(或元组)的项,这里的项目是用户和状态,这就是为什么还有2个迭代变量也命名为用户和状态



查看完整回答
反对 回复 2022-10-06
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

我也有同样的困惑。给出的示例不起作用。缺少的部分是开头的字典对象“用户”。在本教程的那个时候,我们还没有被告知它们。https://docs.python.org/3/library/stdtypes.html#index-50

工作版本是

users = { "John": "inactive", 

               "Helen": "active",

               "James": "active", # and so on...

            }


# Strategy:  Iterate over a copy

for user, status in users.copy().items():

    if status == 'inactive':

        del users[user]


# Strategy:  Create a new collection

active_users = {}

for user, status in users.items():

    if status == 'active':

        active_users[user] = status

如果您想查看内容,则可以将其打印出来。尝试这个:


users = { "John": "inactive", 

               "Helen": "active",

               "James": "active", # and so on...

            }


# Strategy:  Iterate over a copy

for user, status in users.copy().items():

    if status == 'inactive':

        del users[user]


print("Users after deleting.")

for user, status in users.items():

    print(user, status)


users = { "John": "inactive", 

               "Helen": "active",

               "James": "active", # and so on...

            }


# Strategy:  Create a new collection

active_users = {}

for user, status in users.items():

    if status == 'active':

        active_users[user] = status


print("active_users.items")

for user, status in active_users.items():

    print(user, status)


查看完整回答
反对 回复 2022-10-06
?
交互式爱情

TA贡献1712条经验 获得超3个赞

简单示例:假设您有一本实体电话簿,并想在其中查找朋友或家人。Python中的等价物是:


phone_book = { "Mom": "123-456-7890", 

               "Dad": "123-456-7891",

               "John Doe": "555-555-5555", # and so on...

            }

如果您尝试在实体电话簿中查找您父亲的电话号码,您可以通过直接导航到您所写的页面并找到该条目来实现。同样,在 Python 字典中查找也是一样的:


print(phone_book['Dad']) # 123-456-7891

现在现实世界的例子已经很清楚了,看看你的例子。通过.items(),您正在检索一个键值对,其中user只是引用users字典中特定值的键(如“妈妈”或“爸爸”),并且status是映射到该特定值的值user(如他们的电话号码)。


但是,您正在获取users字典的副本,以便您可以遍历usersto的整个配对statuses。如果你有


for user, status in users.items():

   del[user]

您将修改您尝试迭代的字典并且会出现错误。为避免这种情况,您正在制作它的临时副本以迭代并从中删除实际副本user(users想想“从电话簿中删除妈妈”)。


在第二个块中,您正在将人员添加到活动用户字典中。想想“将 Billy 添加到电话簿,电话号码为“111-222-3344”,但在这种情况下,您要添加user和它们对应的status.


TLDR:字典只是查找内容的一种方式,但是为了查找内容,您需要知道它们的标识符(name在电话簿中,user在用户字典中)。number如果您想使用该标识符的值(在电话簿、用户字典中)做某事status,您需要暂时存储它,直到您完成它。


查看完整回答
反对 回复 2022-10-06
  • 3 回答
  • 0 关注
  • 436 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号