我正在尝试学习python,并且我正在阅读《编程python》这本书。我非常了解java,所以我决定也试一试python。我正在看一个使用循环的示例,我对这段代码中发生的事情感到困惑。
for person in people:
for (name, value) in person:
if name == 'name': print(value)我知道有两个循环,person每次循环都加1,我不明白的是第二个循环中的(name,value)发生了什么。有人能给我解释一下发生了什么事吗?
发布于 2011-12-28 03:46:54
它最有可能处理的是以下格式的三维列表:
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)每个人的信息都存储在配对列表中。以这种方式遍历这个名称列表,可以将每个名称对解压到两个单独的变量中:name和value,它们稍后用于检查字段类型,如果是person字段,则用于打印值。
在结果中,此代码段将打印所有人的姓名。
发布于 2011-12-28 03:50:15
不会,person不会在循环中每次递增1。这不是一个数字。person每次通过循环从people接收下一项。
第二个循环是相同的:person是一个列表(或其他序列),每次遍历列表时都会从列表中检索一项。
person中的每一项都是一个键值对,表示为一个包含两个项的列表(或其他序列;可能是一个元组),键在前,值在后。既然我们知道有两个项目,那么我们可以将这些项目解压到变量name和value (一种常见的Python语言)中,而不是遍历这个列表。
如果我们找到了以" name“开头的键值对,那么我们就找到了这个人的名字,所以我们打印它。
这有点令人困惑,因为单词"name“用于键-值对的键以及我们要查找的键。如果我写这段代码,我会使用"key“作为循环变量。
简而言之,people是一个列表列表。people中的每个列表代表一个人,本身就是一个键值对的列表。每个键值对都是一个包含两个项目的列表。外部循环遍历person,内部循环遍历person中的键值对。
发布于 2011-12-28 03:42:44
假设person是一个元组/列表列表,它提取第一个和第二个值。
其基本相同于:
for x in person:
name = x[0]
value = x[1]
# or
name, value = xhttps://stackoverflow.com/questions/8648532
复制相似问题