【问题标题】:Multidimensional list多维列表
【发布时间】:2017-03-17 05:08:28
【问题描述】:

我正在创建一个多维列表,其中考虑了。该代码将要求用户根据 count 输入 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)

非常感谢任何帮助。 :)

【问题讨论】:

    标签: python arrays multidimensional-array


    【解决方案1】:

    闻起来像作业:)

    您需要创建一个列表列表。现在你的表只是一个有 0 的单维列表。您想在外部循环中创建一个列表,并在内部循环中添加该列表。当内部循环完成时,将新创建的列表添加到主列表中。

    【讨论】:

      【解决方案2】:

      这里的关键是 userInput = input("Enter a number:").split() 返回一个列表。你可以直接在表格中使用这个列表,无需解析!

      然后,表的“行”将以 userInput 作为其值。还要记住你现在的表格不正确Number += 1

      while rowNumber < rows:
          userInput = input("Enter a number:").split()
      
          table[rowNumber] = userInput
      
          rowNumber +=1
      

      【讨论】:

        【解决方案3】:

        将 5.5、1、2 的字符串转换为 float、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)
        

        【讨论】:

          【解决方案4】:

          因为这感觉像是一个作业问题,所以我将把这个讨论保持在更高层次。

          多维列表是列表的列表(列表的...,根据需要的深度)。传统上,这将通过嵌套循环结构创建。

          使用列表推导式,创建二维列表非常容易,尽管高阶多维列表可能开始看起来很荒谬并且变得难以阅读([ [ [ [ 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
          

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-04-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-03
            • 2017-02-19
            • 2018-06-22
            相关资源
            最近更新 更多