2017-03-17 51 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 

有多维表的另一个方面说:如果他们是矩形或锯齿状。在矩形多维列表中,列表项的所有兄弟元素具有相同的深度,而锯齿状多维列表(有时也称为稀疏多维列表)可以具有其兄弟元素具有不同深度的列表项;上述用于创建多维列表的代码将创建一个矩形多维列表。处理矩形多维列表的代码更容易编写(尤其是如果事先知道深度的话),但锯齿状多维列表可以使用更少的内存,因为您不必将列表填充到其矩形容量中。