Python中具有动态大小的多维数组

时间:2012-08-13 19:21:48

标签: python multidimensional-array

python非常新,所以试图将我的头围绕多维数组。我阅读了现有的帖子,其中大多数都涉及给定维度的多维数组。就我而言,我没有可能的总行数。正在处理一个文件,该文件是CSV并且有7列,但每条线(取决于满足或未通过标准)都相应地被绘制到一个数组中。基本上每行有7列,但无法预测行数。该行被视为列表。

我的目标是创建符合条件的行的多维数组,然后能够访问数组中的值。我怎么能这样做?

基本上,我该如何处理创建2D列表:

list_2d = [[foo for i in range(m)] for j in range(n)]

上面创建了一个mxn大小的列表但在我的情况下,我只知道n(列)而不是m(行)

6 个答案:

答案 0 :(得分:6)

将列表嵌套在列表中,您无需预定义列表的长度即可使用它,您可以将其附加到列表中。想要另一个维度,只需将另一个列表附加到最内容列表中。

[[[a1, a2, a3]  , [b1, b2, b3] , [c1, c2, c3]],
[[d1, d2, d3]  , [e1, e2, e3] , [f1, f2, f3]]]

并轻松使用它们只需查看Nested List Comprehensions

答案 1 :(得分:3)

在python中,没有必要在正手上声明列表大小。

读取文件行的​​示例可能是:

file_name = "/path/to/file"
list = []

with open(file_name) as file:
  file.readline
  if criteria:
    list.append(line)

对于多维列表。在函数中创建内部列表并将其返回到追加行。像这样:

def returns_list(line):
  multi_dim_list = []
  #do stuff
  return multi_dim_list

交换第一个代码中的最后一行
list.append(returns_list(line))

答案 2 :(得分:2)

我是python的新手,但我发现这是为了创建一个简单的2D数组列表,其中包含8个元素宽且在另一个维度中是动态的

list2d=[[] for i in xrange(8)]

然后你可以为8宽阵列

分配任意数量的变量
list2d[0]=[1,2,3,4,5,6,7,8,9,10,11]
list2d[1]=[12,13,14,15,16,17,18,19]

依旧.....

我希望有帮助

皮特

答案 3 :(得分:0)

如果你保证'n'列,那么你可以在内存中转置。

from collections import defaultdict
import csv

cols = defaultdict(list)

with open('somefile.csv') as csvin:
    for row in csv.reader(csvin):
        for colno, col in enumerate(row):
            cols[colno].append(col)

仍然不是100%确定这是你的问题但是......

答案 4 :(得分:0)

您甚至可以尝试一下对我有用的

s = [[] for y in range(n)]

答案 5 :(得分:0)

尝试以下

#beg 

a=[[]]

r=int(input("how many rows "))
c=int(input("how many cols "))

for i in range(r-1):
    a.append([])

for i in range(r):
    print("Enter elements for row ",i+1)
    for j in range(c):
        num=int(input("Enter element "))
        a[i].append(num)

for i in range(len(a)):
     print()
     for j in range(len(a[i])):
         print(a[i][j],end="  ")

结束