13

对 python 来说非常新,所以试图将我的头包裹在多维数组上。我阅读了现有的帖子,其中大多数都处理给定维度的多维数组。就我而言,我没有可能的总行数的维度。正在处理一个文件,它是 CSV,有 7 列,但每一行,取决于满足或不符合标准,因此被起草到一个数组中。基本上每行有 7 列,但行数无法预测。该行被视为列表。

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

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

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

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

4

6 回答 6

8

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

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

要轻松使用它们,只需查看嵌套列表理解

于 2012-08-13T19:30:46.067 回答
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))
于 2012-08-13T19:32:02.463 回答
3

我发现这是为了创建一个简单的 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]

等等.....

于 2014-01-10T21:58:31.010 回答
2

试试下面

#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="  ")

结尾

于 2020-05-04T04:47:20.273 回答
1

你甚至可以试试这个它对我有用

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

于 2019-04-21T06:24:45.807 回答
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% 确定这是你的问题......

于 2012-08-13T19:44:51.827 回答