2017-03-17 56 views
0

我正在創建一個多維列表其中考慮在內。代碼將要求用戶輸入n位數的數量取決於計數多維名單

示例:用戶需要輸入數字5倍然後數目被顯示爲列表的列表。

UserInput: 1 2 3 
      4 5 6 
      5.5 1 2 
Output: [[1,2,3],[4,5,6],[5.5,1,2]] 

我能夠做一維列表,但是當涉及到多維列表時,我迷失了它。這是我到目前爲止編制的代碼:

rows = 5 
table = rows*[0] 
rowNumber = 0 

while rowNumber < rows: 
    userInput = input("Enter a number:").split() 

    for i in range(len(userInput)): 
     for j in range(len(userInput[i]): 
       table[i][j] = userInput 

rowNumber +=1 
print(table) 

任何幫助非常感謝。 :)

回答

0

聞起來像作業:)

您需要創建列表的列表。現在你的表只是一個有0的單維列表。你想在外部循環中創建一個列表,並添加到內部循環中。當內循環結束時,將新創建的列表添加到主列表中。

0

這裏的關鍵是userInput = input(「Enter a number:」)。split()返回一個列表。你可以直接在表中使用這個列表,而不必解析它!

表的'行'將具有userInput作爲其值。同時請記住,你有nowNumber + = 1

while rowNumber < rows: 
    userInput = input("Enter a number:").split() 

    table[rowNumber] = userInput 

    rowNumber +=1 
0

它不完全直接地得到5.5,1,2轉成浮動,INT和INT字符串,但這個被它做不正確的製表:

rows = 5 
table = [] 

print('Enter a number:') 
while len(table) < rows: 
    userInput = input().split() 
    table.append([int(x) if int(float(x))==float(x) else float(x) for x in userInput ]) 

print(table) 

如果我是讀進過多細節,這樣的事情是確定的:

[[1.1, 2.0, 3.0], [2.0, 3.0, 4.0], [3.0, 4.0, 5.0], [4.0, 5.0, 6.0], [5.0, 6.0, 7.0]] 

那麼這段代碼是有點簡單:

rows = 5 
table = [] 

print('Enter a number:') 
while len(table) < rows: 
    userInput = input().split() 
    table.append(list(map(float, userInput))) 

print(table) 
0

既然這感覺就像是一個任務問題,我會繼續討論更高層次的問題。

多維列表是列表(列表...的列表,根據需要儘可能深)。傳統上這將通過嵌套循環結構來創建。

使用列表解析功能,創建二維列表非常簡單,但高階多維列表開始看起來非常荒謬,並且可能變得難以閱讀([ [ [ [ x ] for x in source_0 ] for y in source_1 ] for z in source_3 ]來創建四維列表)。

需要注意的是,用於製作固定深度多維列表的構造比可變深度多維列表更明顯。

假設您必須輸入多維列表的維數。有幾種不同的方法來解決這個問題,但我最喜歡的是使用循環和堆棧;該循環會監視堆棧的長度,併爲堆棧中的頂層項目添加附加列表,然後將新列表推入堆棧。例如:

def create_multidimensional_list(depth): 
     result = [] 
     stack = [ result ] 
     while len(stack) < depth: 
      new_list = [] 
      stack[ -1 ].append(new_list) 
      stack.append(new_list) 
     return result 

有多維表的另一個方面說:如果他們是矩形或鋸齒狀。在矩形多維列表中,列表項的所有兄弟元素具有相同的深度,而鋸齒狀多維列表(有時也稱爲稀疏多維列表)可以具有其兄弟元素具有不同深度的列表項;上述用於創建多維列表的代碼將創建一個矩形多維列表。處理矩形多維列表的代碼更容易編寫(尤其是如果事先知道深度的話),但鋸齒狀多維列表可以使用更少的內存,因爲您不必將列表填充到其矩形容量中。