python非常新,所以试图将我的头围绕多维数组。我阅读了现有的帖子,其中大多数都涉及给定维度的多维数组。就我而言,我没有可能的总行数。正在处理一个文件,该文件是CSV并且有7列,但每条线(取决于满足或未通过标准)都相应地被绘制到一个数组中。基本上每行有7列,但无法预测行数。该行被视为列表。
我的目标是创建符合条件的行的多维数组,然后能够访问数组中的值。我怎么能这样做?
基本上,我该如何处理创建2D列表:
list_2d = [[foo for i in range(m)] for j in range(n)]
上面创建了一个mxn大小的列表但在我的情况下,我只知道n(列)而不是m(行)
答案 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=" ")