[英]I can't make sense of this code:
我想開始使用二維列表/元組,因為我想將它們用於我的想法。 我一直很難理解for指令,這對我來說沒有任何意義,沒有直覺。 問題是我只是不了解for
指令。 我得到了顯示以下簡單元組的代碼:
m=((1,2),(3,4),(5,6))
for i in range(len(m)):
for j in range(len(m[i])):
print(m[i][j]," ",end="")
print()
顯示:
1 2
3 4
5 6
我真的不明白這部分代碼是什么意思(m[i])
和m[i][j]
我知道len
是什么意思。
我也嘗試將[]更改為(),因為它們應該是元組的一部分,但是我收到一條錯誤消息:
發生TypeError消息='tuple'對象不可調用
如果我刪除部分代碼,結果將顯示在括號中,但此代碼會以某種方式刪除元組中的所有括號:
m=((1,2),(3,4),(5,6))
for i in range(len(m)):
print(m[i])
print()
例如,此結果顯示的結果基本相同,但帶有括號:
(1,2)
(3,4)
(5,6)
這里發生了什么?
編輯:
在下面的答案中,我編寫了幫助我理解和理解的代碼,謝謝所有答案,您無需輸入就可以執行此操作。
外部的for循環在m
索引方向上遍歷每個元組:
>>> m = ((1,2),(3,4),(5,6))
>>> for i in range(len(m)):
print(m[i])
(1, 2)
(3, 4)
(5, 6)
內部的(嵌套的)for循環遍歷m[i]
訪問的每個元組(也按索引) ,並且將其內容全部顯示在一行上:
>>> m = ((1,2),(3,4),(5,6))
>>> # loop through each tuple in `m` index-wise
>>> for i in range(len(m)):
# loop through each element in each tuple index-wise
for j in range(len(m[i])):
# print each element on a single line.
print(m[i][j]," ",end="")
# print a newline
print()
1 2
3 4
5 6
之所以感到如此尷尬,是因為您沒有使用for
-loops來設計它們的使用方式,即習慣用法。 Python for
loops可以按元素而不是按索引迭代集合。 根本不需要使用range
或len
。 直接在m
迭代,並在m
每個元組:
for tup in m:
for num in tup:
print(num," ",end="")
print()
如您所見,以上內容更加易於編寫和理解。
如何初始化二維數組和元組:
myarr = [[1, 2], [3, 4]] # A 2d array mytuple = ((5, 6), (7, 8)) # A 2d tuple
如何訪問二維列表:
print(myarr[0]) # = [1, 2] print(myarr[1][0]) #get the 1st element of the second array in myarr = 3
您可以通過以下方式訪問2d元組:
print(mytuple[0]) # = (5, 6) print(mytuple[1][0]) #get the 1st element of the second tuple in myarr = 7
做mytuple(1)
試圖調用函數“ mytuple”,這顯然是一個元組而不是一個函數,因此存在錯誤。
首先,我將澄清元組和列表之間的區別以及如何訪問它們兩者,以消除您的困惑:
第一列表:也稱為序列,序列的每個元素都分配有一個數字-其位置或索引。 第一個索引為零,第二個索引為一,依此類推
為了訪問它的元素,您應該將[index]
與index(要獲取的元素的位置)一起使用
第二元組:一系列不可變的 Python對象。 元組是序列,就像列表一樣。 元組和列表之間的區別在於,不能像列表一樣更改元組,並且元組使用括號,而列表使用方括號。
為了訪問它的值,您還可以將[index]
與index(要獲取的元素的位置)一起使用
您的代碼對列表和元組均有效:
m = ((1,2),(3,4),(5,6))
#loop through each tuple in `m`
for i in range(len(m)):
#loop through each element in each tuple
for j in range(len(m[i])):
#print each element on a single line.
print(m[i][j]," ",end="")
#print a newline
print()
根據我從你們那里得到的所有信息,我寫了這樣的話:
m=((1,2),(3,4),(5,6))
for i in range(len(m)):
for j in range(len(m[i])):
print(m[i][j]," ",end="")
print()
print()
print(len(m))
print(len(m[i]))
print()
for tup in m:
for elem in tup:
print(elem, end=' ')
print()
print()
print()
for tup2 in m:
for num in tup2:
print(num," ",end="")
print()
print()
print()
print("333",end=" ")
print("4444",end=" ")
print("55555")
令我感到困惑的是,我不知道“ i”和“ j”的值是什么,然后最重要的是印刷品的所作所為也加劇了這種混亂,所以我只是印刷了“ i”的值。 ”和“ j”,它們分別是3和2,然后在弄清楚打印的內容后就知道了。
-首先執行3個循環,其中3個來自元組的len
-之后,它基於其他3個元組的len進行2個循環,即2
-最后,它像m [i] [j]這樣打印每個元素,這意味着它將以元素0,0開始,然后是0,1,然后是1,0,然后是1,1,然后是2,0,然后是2,1
這將是元組的“地圖”:
(0,0)(0,1)
(1,0)(1,1)
(2,0)(2,1)
每個元素都有其坐標,第一個元素為0,0,第二個元素為0,1,依此類推。
為了像這樣打印而不是一行打印,您可以使用:
print(m[i][j]," ",end="")
print()
我對此的理解是,“”只是一個空格,無論如何,都只能是結尾“””),因此代碼不會中斷該行,因此將每個循環打印在一行上,並在每行結束時用一個空格結束因此它不會一個接一個地打印結果,另一個print()只是添加一個換行符以使其更具“可讀性”。
我要感謝你們,因為我以前沒有看到過這個,為什么我得到了錯誤,為什么我不了解for循環,為什么我可以用更簡單的方式做到這一點。
大家現在一切都清楚了,謝謝大家。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.