追加到python中行/列长度未知的2D列表

2024-10-01 09:40:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个二维列表的行和列,遇到了麻烦。Python不允许将值赋给未初始化的“cell”。我不知道如何初始化我的网格,因为我不知道时间的长度。以下内容:

data = list()
maReader = csv.reader(open('TEST.csv', 'rb'), delimiter=',', quotechar='"')
for rindex, row in enumerate(maReader):
    for iindex, item in enumerate(row):
        data[iindex][rindex] = item

失败,并出现“IndexError:list assignment index out range”错误。我可以循环两次,第一次是计算列和行数,然后初始化网格,再循环一次并赋值,但这似乎非常浪费。在

我对Python还很陌生,我认为有一种简单的方法可以做到这一点,但我却没有。在

谢谢你的帮助。在


Tags: csvin网格列表fordataitemlist
3条回答

假设所有行的长度相等,可以这样处理:

data = list()
maReader = csv.reader(open('TEST.csv', 'rb'), delimiter=',', quotechar='"')
for rindex, row in enumerate(maReader):
    for iindex, item in enumerate(row):
        if len(data) <= iindex:
            data.append([])
        data[iindex].append(item)

这应该做到:

maReader = csv.reader(open('TEST.csv', 'rb'), delimiter=',', quotechar='"')
data = zip(*maReader)

但是,zip给出了元组的列表。如果需要列表,可以执行以下任一操作:

^{pr2}$

这里有一个与@retracile的LBYL方法相对应的EAFP。在

data = [] #list()
maReader = csv.reader(open('TEST.csv', 'rb'), delimiter=',', quotechar='"')
for rindex, row in enumerate(maReader):
    for iindex, item in enumerate(row):
        try:
            data[iindex].append(item)
        except IndexError:
            data.append([item])

相关问题 更多 >