簡體   English   中英

我無法理解這段代碼:

[英]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可以按元素而不是按索引迭代集合。 根本不需要使用rangelen 直接在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM