【问题标题】:2D arrays in PythonPython中的二维数组
【发布时间】:2010-10-25 19:27:23
【问题描述】:

在 Python 中创建二维数组的最佳方法是什么?

我想要的是存储这样的值:

X , Y , Z

这样我就可以访问X[2],Y[2],Z[2]X[n],Y[n],Z[n] 之类的数据,其中n 是可变的。 一开始我不知道n 有多大,所以我想在最后附加值。

【问题讨论】:

    标签: python arrays list tuples multidimensional-array


    【解决方案1】:
    x=list()
    def enter(n):
        y=list()
        for i in  range(0,n):
            y.append(int(input("Enter ")))
        return y
    for i in range(0,2):
        x.insert(i,enter(2))
    print (x)
    

    在这里,我创建了创建一维数组并作为数组成员插入到另一个数组中的函数。一个数组中的多个一维数组,随着 n 和 i 的值的变化你创建多维数组

    【讨论】:

      【解决方案2】:

      请考虑以下代码:

      from numpy import zeros
      scores = zeros((len(chain1),len(chain2)), float)
      

      【讨论】:

      • 欢迎来到 Stack Overflow!额外的解释会改善你的答案。
      【解决方案3】:

      如果您担心内存占用,Python 标准库包含array module;这些数组包含相同类型的元素。

      【讨论】:

        【解决方案4】:

        我建议你使用这样的字典:

        arr = {}
        
        arr[1] = (1, 2, 4)
        arr[18] = (3, 4, 5)
        
        print(arr[1])
        >>> (1, 2, 4)
        

        如果您不确定字典中是否定义了条目,则在调用“arr[x]”时需要一个验证机制,例如尝试除外。

        【讨论】:

        • 如果你想要一个多维“数组”,你可以使用元组作为字典中的键,如下所示:arr[(1, 20)] = 12
        【解决方案5】:

        根据您的操作,您可能没有真正的二维数组。

        80% 的情况下,您都有“行状对象”的简单列表,这可能是正确的序列。

        myArray = [ ('pi',3.14159,'r',2), ('e',2.71828,'theta',.5) ]
        
        myArray[0][1] == 3.14159
        myArray[1][1] == 2.71828
        

        更多情况下,它们是类或字典或集合的实例,或者是您以前的语言中没有的更有趣的东西。

        myArray = [ {'pi':3.1415925,'r':2}, {'e':2.71828,'theta':.5} ]
        

        20% 的时间你有一本字典,由一对键控

        myArray = { (2009,'aug'):(some,tuple,of,values), (2009,'sep'):(some,other,tuple) }
        

        很少,你真的需要一个矩阵。

        您在 Python 中有大量的集合类。很有可能你有比矩阵更有趣的东西。

        【讨论】:

          【解决方案6】:

          如果你想对数组做一些严肃的工作,那么你应该使用numpy library。例如,这将允许您进行向量加法和矩阵乘法,并且对于大型数组,它比 Python 列表快得多。

          但是,numpy 要求预定义大小。当然你也可以将 numpy 数组存储在一个列表中,比如:

          import numpy as np
          vec_list = [np.zeros((3,)) for _ in range(10)]
          vec_list.append(np.array([1,2,3]))
          vec_sum = vec_list[0] + vec_list[1]  # possible because we use numpy
          print vec_list[10][2]  # prints 3
          

          但是由于您的 numpy 数组非常小,我想与使用元组相比会有一些开销。这完全取决于您的优先事项。

          另请参阅另一个question,它非常相似(除了可变大小)。

          【讨论】:

          • 我考虑过谈论这个,是的,这是一个有用的补充。但是,不是 numpy 需要固定长度的数组吗?
          • 是的,谢谢,我修改了答案以更清楚地解决这个问题。
          【解决方案7】:
          >>> a = []
          
          >>> for i in xrange(3):
          ...     a.append([])
          ...     for j in xrange(3):
          ...             a[i].append(i+j)
          ...
          >>> a
          [[0, 1, 2], [1, 2, 3], [2, 3, 4]]
          >>>
          

          【讨论】:

          • 我会以一种功能性的方式写这个 - 更简洁:a = [[i + j for j in range(3)] for i in range(3)]
          【解决方案8】:

          在 Python 中,通常会为此使用 lists。列表可以任意嵌套,从而允许创建二维数组。并非每个子列表都需要具有相同的大小,这样才能解决您的其他问题。看看我链接到的例子。

          【讨论】:

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