簡體   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