繁体   English   中英

这个循环如何工作?

[英]How does this for loop work?

我正在尝试学习python,我正在阅读编程python。 我非常了解java所以我决定尝试python。 我将通过一个使用循环的示例,我对此代码中发生的事情感到困惑

for person in people:
  for (name, value) in person:
    if name == 'name': print(value)

我知道有两个循环,每次循环时person增加1,我不理解的是第二个循环中(name,value)发生了什么。 有人可以向我解释发生了什么事吗?

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

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)

每个人的信息存储在一对列表中。 以这种方式迭代此person列表会将每一对解包为两个单独的变量: namevalue ,稍后用于检查字段类型和打印值(如果是名称字段)。

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

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

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

person每个项目是键值对,表示为两项列表(或其他序列;可能是元组),其中键首先且值为秒。 我们不是迭代这个列表,因为我们知道有两个项目,我们可以将项目解压缩到变量namevalue (一个常见的Python习语)。

如果我们找到以“name”开头的键值对,那么我们找到了该人的名字,因此我们将其打印出来。

这有点令人困惑,因为“name”这个词用于键值对的键以及我们正在寻找的键。 如果我写这个,我会使用“key”代替循环变量。

简而言之, people是列表清单。 people每个列表代表一个人,并且本身就是键值对的列表。 每个键值对是两个项目的列表。 外循环遍历人,内循环遍历人的键值对。

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

它基本上与以下相同:

for x in person:
    name = x[0]
    value = x[1]
    # or
    name, value = x

for循环的形式如下:

for vars in iterable:

和vars可以是任何可以出现在赋值语句左侧的东西。 然后将来自iterable的每个值分配给该左侧。

在Python中,您可以一次分配多个名称,在这种情况下,右侧必须是包含许多值的列表或元组:

a, b, c = 1, 2, 3

所以在你的for循环中,person的每个值必须是一个元组或带有两个元素的列表,一对。 循环的每次迭代,下一对被解压缩为namevalue

简而言之,“名称”和“值”从“人”中为“人”中的每个元素“人”获得指定值。

让我们回顾一下。

for person in people:

遍历名为“people”的列表的元素。 每次通过此循环时,名为“person”的变量将从名为“people”的列表中分配下一个元素。

for (name, value) in person:

名为“person”的变量是一个列表,其中每个元素都是一个元组,其中包含两个名为“name”和“value”的变量。 每次通过这个循环,当前的“人”列表元素被分成其组成部分,“名称”和“人”。

所以“人”看起来像

[person1, person2, person3, ...]

每个“人”看起来像

[(name1, value1), (name2, value2), (name3, value3), ...]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM