如何在Python中创建多个(但个别)空列表?

lsunt 发布于 2019-03-09 list 最后更新 2019-03-09 14:36 0 浏览

我写了一个脚本,它在某一时刻生成一堆空列表,并使用结构代码:

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]))
已邀请:

ea_qui

赞同来自:

检查接受的答案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': []}
>>> 

fearum

赞同来自:

你太复杂了。只需使用列表或字典:

fields = {key: [] for key in 'ABCD'}
然后根据需要参考fields['A']等,或循环结构以依次处理每个结构。

nqui

赞同来自:

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

xqui

赞同来自:

根据您的使用示例,您真正想要的是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"在每一行中具有正确的列数。您可能需要执行检查以确保所有行都“填写”。