首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个for循环是如何工作的?

这个for循环是如何工作的?
EN

Stack Overflow用户
提问于 2011-12-28 03:36:57
回答 5查看 236关注 0票数 3

我正在尝试学习python,并且我正在阅读《编程python》这本书。我非常了解java,所以我决定也试一试python。我正在看一个使用循环的示例,我对这段代码中发生的事情感到困惑。

代码语言:javascript
复制
for person in people:
  for (name, value) in person:
    if name == 'name': print(value)

我知道有两个循环,person每次循环都加1,我不明白的是第二个循环中的(name,value)发生了什么。有人能给我解释一下发生了什么事吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-12-28 03:46:54

它最有可能处理的是以下格式的三维列表:

代码语言:javascript
复制
people = [
    [['name', 'John'], ['age', 21]],
    [['name', 'Ann'],  ['age', 45]],
    [['name', 'Tom'],  ['age', 32]],
]

for person in people:
  # person is like [['name', 'Ann'],  ['age', 45]] here
  for (name, value) in person:
    # unpack [field_name, field_value] to name = field_name, value = field_value
    # so name is like 'name' (or 'age') and value is like 'Ann' (or 45)
    if name == 'name': print(value)

每个人的信息都存储在配对列表中。以这种方式遍历这个名称列表,可以将每个名称对解压到两个单独的变量中:namevalue,它们稍后用于检查字段类型,如果是person字段,则用于打印值。

在结果中,此代码段将打印所有人的姓名。

票数 8
EN

Stack Overflow用户

发布于 2011-12-28 03:50:15

不会,person不会在循环中每次递增1。这不是一个数字。person每次通过循环从people接收下一项。

第二个循环是相同的:person是一个列表(或其他序列),每次遍历列表时都会从列表中检索一项。

person中的每一项都是一个键值对,表示为一个包含两个项的列表(或其他序列;可能是一个元组),键在前,值在后。既然我们知道有两个项目,那么我们可以将这些项目解压到变量namevalue (一种常见的Python语言)中,而不是遍历这个列表。

如果我们找到了以" name“开头的键值对,那么我们就找到了这个人的名字,所以我们打印它。

这有点令人困惑,因为单词"name“用于键-值对的键以及我们要查找的键。如果我写这段代码,我会使用"key“作为循环变量。

简而言之,people是一个列表列表。people中的每个列表代表一个人,本身就是一个键值对的列表。每个键值对都是一个包含两个项目的列表。外部循环遍历person,内部循环遍历person中的键值对。

票数 3
EN

Stack Overflow用户

发布于 2011-12-28 03:42:44

假设person是一个元组/列表列表,它提取第一个和第二个值。

其基本相同于:

代码语言:javascript
复制
for x in person:
    name = x[0]
    value = x[1]
    # or
    name, value = x
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8648532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档