【问题标题】:Two dimensional array in pythonpython中的二维数组
【发布时间】:2012-01-01 06:14:12
【问题描述】:

我想知道如何在 Python 中声明一个二维数组。

arr = [[]]

arr[0].append("aa1")
arr[0].append("aa2")
arr[1].append("bb1")
arr[1].append("bb2")
arr[1].append("bb3")

前两个任务运行良好。但是当我尝试这样做时,arr[1].append("bb1"),我收到以下错误:

IndexError: list index out of range.

在声明二维数组时我做了什么傻事吗?

编辑:
但我不知道数组中的元素数量(行和列)。

【问题讨论】:

    标签: python multidimensional-array


    【解决方案1】:

    您不会在 python 中“声明”数组或其他任何东西。您只需分配给(新)变量。如果你想要一个多维数组,只需添加一个新数组作为数组元素。

    arr = []
    arr.append([])
    arr[0].append('aa1')
    arr[0].append('aa2')
    

    arr = []
    arr.append(['aa1', 'aa2'])
    

    【讨论】:

    • 不应该是arr.append(...) 而不是arr[0] = ...,以避免IndexError: list assignment index out of range
    【解决方案2】:

    Python 中没有这样的多维数组,你拥有的是一个包含其他列表的列表。

    >>> arr = [[]]
    >>> len(arr)
    1
    

    您所做的是声明一个包含单个列表的列表。所以arr[0] 包含一个列表,但arr[1] 没有定义。

    您可以定义一个包含两个列表的列表,如下所示:

    arr = [[],[]]
    

    或者定义一个更长的列表,你可以使用:

    >>> arr = [[] for _ in range(5)]
    >>> arr
    [[], [], [], [], []]
    

    不应该做的是:

    arr = [[]] * 3
    

    因为这会将同一个列表放在容器列表的所有三个位置:

    >>> arr[0].append('test')
    >>> arr
    [['test'], ['test'], ['test']]
    

    【讨论】:

    • 列表推导中的下划线有什么作用?
    • @root45 我们需要在列表推导中添加一个变量,因此我们可以输入arr = [[] for i in range(5)],但是有一个约定,将您永远不会使用的变量命名为_。尽管在交互式 Python REPL 中,_ 变量存储了最后一个表达式的结果。
    • omg 这个 []*3 东西是导致我的hackerrank代码中所有这些问题的原因。我已经用 Py 编码 4 年了,但我似乎还有很多东西要学!
    【解决方案3】:

    您在这里使用的不是数组,而是列表(列表)。

    如果你想要 Python 中的多维数组,你可以使用 Numpy 数组。您需要提前知道形状。

    例如:

     import numpy as np
     arr = np.empty((3, 2), dtype=object)
     arr[0, 1] = 'abc'
    

    【讨论】:

      【解决方案4】:

      您尝试追加到数组中的第二个元素,但它不存在。 创建它。

      arr = [[]]
      
      arr[0].append("aa1")
      arr[0].append("aa2")
      arr.append([])
      arr[1].append("bb1")
      arr[1].append("bb2")
      arr[1].append("bb3")
      

      【讨论】:

        【解决方案5】:

        我们可以如下动态创建多维数组,

        创建 2 个变量以从标准输入中读取 x 和 y:

         print("Enter the value of x: ")
         x=int(input())
        
         print("Enter the value of y: ")
         y=int(input())
        

        使用以下代码创建一个初始值填充为 0 或任何内容的列表数组

        z=[[0 for row in range(0,x)] for col in range(0,y)]
        

        为您的数组数据创建行数和列数。

        从标准输入读取数据:

        for i in range(x):
                 for j in range(y):
                     z[i][j]=input()
        

        显示结果:

        for i in range(x):
                 for j in range(y):
                     print(z[i][j],end=' ')
                 print("\n")
        

        或者用另一种方式显示上面动态创建的数组是,

        for row in z:
             print(row)
        

        【讨论】:

          【解决方案6】:

          在Python中构造多维列表时,我通常使用类似于ThiefMaster的解决方案,但不是将项目附加到索引0,然后将项目附加到索引1等,我总是使用索引-1它自动成为数组中最后一项的索引。

          arr = []
          
          arr.append([])
          arr[-1].append("aa1")
          arr[-1].append("aa2")
          
          arr.append([])
          arr[-1].append("bb1")
          arr[-1].append("bb2")
          arr[-1].append("bb3")
          

          将生成您所追求的二维数组(实际上是列表的列表)。

          【讨论】:

            【解决方案7】:

            您可以先将元素附加到初始化的数组中,然后为方便起见,您可以将其转换为 numpy 数组。

            import numpy as np
            a = [] # declare null array
            a.append(['aa1']) # append elements
            a.append(['aa2'])
            a.append(['aa3'])
            print(a)
            a_np = np.asarray(a) # convert to numpy array
            print(a_np)
            

            【讨论】:

            • 请不要在你的答案中只写代码...解释它是如何解决问题的。
            【解决方案8】:
            a = [[] for index in range(1, n)]
            

            【讨论】:

              【解决方案9】:

              用于竞争编程

              1) 用于输入二维数组中的值

              row=input()
              main_list=[]
              for i in range(0,row):
                  temp_list=map(int,raw_input().split(" "))
                  main_list.append(temp_list)
              

              2) 用于显示二维数组

              for i in range(0,row):
                  for j in range(0,len(main_list[0]):
                      print main_list[i][j],
                      print
              

              【讨论】:

                【解决方案10】:

                上述方法不适用于 for 循环,我想在 if 条件下将数据从二维数组传输到新数组。这个方法可行

                a_2d_list = [[1, 2], [3, 4]]
                a_2d_list.append([5, 6])
                print(a_2d_list)
                
                OUTPUT - [[1, 2], [3, 4], [5, 6]]
                

                【讨论】:

                  【解决方案11】:
                  x=3#rows
                  y=3#columns
                  a=[]#create an empty list first
                  for i in range(x):
                      a.append([0]*y)#And again append empty lists to original list
                      for j in range(y):
                           a[i][j]=input("Enter the value")
                  

                  【讨论】:

                    【解决方案12】:

                    就我而言,我必须这样做:

                    for index, user in enumerate(users):
                        table_body.append([])
                        table_body[index].append(user.user.id)
                        table_body[index].append(user.user.username)
                    

                    输出:

                    [[1, 'john'], [2, 'bill']]
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2010-10-25
                      • 2012-03-09
                      • 2020-01-22
                      • 2020-12-04
                      • 2021-06-22
                      相关资源
                      最近更新 更多