2012-08-13 34 views
4

python非常新,所以試圖圍繞多維數組進行打包。我讀了現有的帖子,其中大多數處理給定尺寸的多維數組。在我的情況下,我沒有可能的總行數的尺寸。正在處理一個文件,它是CSV並且有7列,但每行都取決於會議或失敗,相應地將一個標準草擬到一個數組中。基本上每行有7列,但行數不能預測。該行正在被視爲一個列表。Python中的多維數組動態大小

我的目標是創建符合條件的行的多維數組,然後能夠訪問數組中的值。我怎樣才能做到這一點?

基本上,我怎麼剷球創建一個二維表:

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

上面創建一個MXN大小的名單,但在我的情況,我只知道N(列),而不是M(行)

+0

你能提供的例子嗎? – 2012-08-13 19:24:48

+0

umm,..說我想創建二維列表,每個成員可以通過指定列和行來訪問,現在給定大小..我可以做 list_2d = [[foo爲我在範圍內(10)]爲j在範圍內(10)] 但我只知道我的2d數組中的列總數是n,總行數是動態和coule ba nythng,我該如何處理? – user1020069 2012-08-13 19:29:10

回答

3

列表中不需要預先定義列表的長度以使用它,並且可以附加到列表中。想要另一個維度只需將另一個列表追加到最內層列表中。

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

,並輕鬆地使用他們只是看Nested List Comprehensions

+0

看起來像一個列表清單......你如何訪問一個特定的索引? – user1020069 2012-08-13 19:31:59

+0

說我只想得到價值e2,那麼我在看什麼指數? – user1020069 2012-08-13 19:32:46

+2

類似於任何其他語言 http://ideone.com/s3sfD 下面是一個例子 – VoronoiPotato 2012-08-13 19:36:55

2

在蟒蛇沒有必要在正手申報表的大小。

的讀取線到文件的例子可能是這樣的:

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)) 
+0

這裏是其他avilable方法http://docs.python .org/tutorial/datastructures.html – 2012-08-13 19:32:50

+1

在這裏我會注意不要使用術語'array'(即使OP也是這樣)。數組這個術語是有誤導性的,因爲有一個'array'模塊,這就是'numpy.ndarray'的常見名稱,當使用'python array'搜索時,它更有可能出現。 – mgilson 2012-08-13 19:34:41

+0

我已經換了謝謝提醒。我每天使用3-4種語言,很難將它們分開幾次。 – 2012-08-14 08:35:07

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%肯定這是你的問題,但...

1

我是新來的蟒蛇,但我發現這個創建是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] 

等等.....

我希望幫助

皮特