2013-04-11 97 views
4

我寫,在一個點生成施加代碼與結構一堆空列表的腳本:如何在Python中創建多個(但個別的)空列表?

A,B,C,D=[],[],[],[] 

產生的輸出:

A=[] 
B=[] 
C=[] 
D=[] 

事情是這樣的,現在,我每次使用不同的數據集作爲輸入時,都必須手動修改這些字母。我希望能夠自動化。 我想過這樣做:

FieldList=[A,B,C,D] 
bracket=[] 
[[0]for field in FieldList] 
for field in FieldList: 
    bracket=bracket+["[]"] 
FieldList=bracket     

在這裏,我試圖複製 「A,B,C,d = [] [] [] []」,但顯然這不是它是如何工作的。

我也試過:

FieldList=[A,B,C,D] 
bracket=[] 
[[0]for field in FieldList] 
for field in FieldList: 
    field=[] 

但最後,它只是產生一個列表呼叫「領域」。

所以,這是我需要的列表。我將從csv讀取信息,並將從每行提取的數據添加到列表中。如果生成「列表清單」,我是否仍然可以單獨調用它們中的每一個來追加內容?

A,B,C,D=[],[],[],[] 
with open(csvPath+TheFile, 'rb') as csvfile: #Open the csv table 
    r = csv.reader(csvfile, delimiter=';')  #Create an iterator with all the rows of the csv file, indicating the delimiter between columns 
    for i,row in enumerate(r):     #For each row in the csv 
     if i > 0:        #Skip header 
      A.append(float(row[0]))    #Extract the information and append it to each corresponding list 
      B.append(float(row[1])) 
      C.append(format(row[2])) 
      D.append(format(row[3])) 
+5

爲什麼不有一個單一的多維列表,而不是所有這些單獨的列表? – 2013-04-11 16:15:00

+2

我想你想要列表或列表字典的列表。 – NPE 2013-04-11 16:15:14

+1

我想一個列表清單不適合我,因爲我以後如何使用每個元素。讓我告訴你我的代碼的其餘部分是怎麼樣的,以便你可以自己判斷。 – Noebyus 2013-04-11 16:18:16

回答

9

你太過於複雜了。只使用一個列表或詞典:

fields = {key: [] for key in 'ABCD'} 

然後參考fields['A']等根據需要,或環在該結構上,以處理每個反過來。

+2

'dict((key,[])for'ABCD')'用於較老的Python(2.6)。 – freakish 2013-04-11 16:18:09

+0

太棒了,謝謝!這就是我需要的! :) – Noebyus 2013-04-11 16:28:17

1
dict((k, []) for k in ['A','B','C','D']) 
0

根據您的使用例子,你真正想要的是zip()

在這個例子中,注意csv.reader()基本上打破了文件成表格的數據:

[ 
    ["a1", "b1", "c1", "d1"], 
    ["a2", "b2", "c2", "d2"], 
    ..., 
    ["an", "bn", "cn", "dn"] 
] 

的例如:

table = [ 
    [1, 2, 3, 4], 
    [5, 6, 7, 8], 
    [9, 10, 11, 12], 
    ] 

#How to transpose the data into columns??? Easy! 

columns = zip(*table) 

現在,你有一個變量,columns,形式:

columns = [ 
    [1, 5, 9], 
    [2, 6, 10], 
    [3, 7, 11], 
    [4, 8, 12] 
] 

好了,讓我們將此應用到CSV文件:

with open("mycsv.csv", "rb") as infile: 
    reader = csv.reader(infile, delimiter=";") 
    next(reader, None) #skip the header 
    columns = zip(*reader) 

這就是它!

注意:對於此示例,我們假設"mycsv.csv"在每一行中都有正確的列數。您可能需要執行檢查以確保所有行都「被填充」。

0

檢查接受的答案here。 (通過點擊或不點擊)

>>> obj = {} 
>>> for i in range(1, 21): 
...  obj['l'+str(i)] = [] 
... 
>>>obj 
{'l18': [], 'l19': [], 'l20': [], 'l14': [], 'l15': [], 'l16': [], 'l17': [], 'l10': [], 'l11': [], 'l12': [], 'l13': [], 'l6': [], 'l7': [], 'l4': [], 'l5': [], 'l2': [], 'l3': [], 'l1': [], 'l8': [], 'l9': []} 
>>> 
相關問題