[英]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
列表會將每一對解包為兩個單獨的變量: name
和value
,稍后用於檢查字段類型和打印值(如果是名稱字段)。
在結果中,此片段將打印所有人的姓名。
不,每次循環時person
不會增加1。 這不是一個數字。 person
從接收的下一個項目people
通過每一次循環中。
第二個循環是相同的: person
是列表(或其他序列),列表中的每次迭代都從列表中檢索一個項目。
person
每個項目是鍵值對,表示為兩項列表(或其他序列;可能是元組),其中鍵首先且值為秒。 我們不是迭代這個列表,因為我們知道有兩個項目,我們可以將項目解壓縮到變量name
和value
(一個常見的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的每個值必須是一個元組或帶有兩個元素的列表,一對。 循環的每次迭代,下一對被解壓縮為name
和value
。
簡而言之,“名稱”和“值”從“人”中為“人”中的每個元素“人”獲得指定值。
讓我們回顧一下。
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.