Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
附加到python中行/列长度未知的2D列表_Python_List_Grid_2d_Append - Fatal编程技术网

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

附加到python中行/列长度未知的2D列表,python,list,grid,2d,append,Python,List,Grid,2d,Append,我想翻转2D列表上的行和列,但遇到了麻烦。Python不允许将值分配给未初始化的“单元格”。我不知道如何初始化我的网格,因为我提前不知道长度。以下是: data = list() maReader = csv.reader(open('TEST.csv', 'rb'), delimiter=',', quotechar='"') for rindex, row in enumerate(maReader): for iindex, item in enumerate(row):

我想翻转2D列表上的行和列,但遇到了麻烦。Python不允许将值分配给未初始化的“单元格”。我不知道如何初始化我的网格,因为我提前不知道长度。以下是:

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
失败,出现“索引器:列表分配索引超出范围”错误。我可以循环两次,第一次计算列和行,然后初始化网格,然后再次循环并分配值,但这看起来非常浪费

我对Python非常陌生,我想有一种简单的方法可以做到这一点,但我没有


谢谢您的帮助。

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

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)
data=list()
maReader=csv.reader(打开('TEST.csv','rb'),分隔符=',',引号=')
对于rindex,枚举中的行(maReader):
对于iindex,枚举(行)中的项目:
如果len(data)这应该是:

maReader = csv.reader(open('TEST.csv', 'rb'), delimiter=',', quotechar='"')
data = zip(*maReader)
但是,
zip
提供了元组列表。如果需要列表列表,可以执行以下任一操作:

data = [list(x) for x in zip(*maReader)]
data = map(list, zip(*maReader))
这里是@retracile方法的对比

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])

如果所有行的长度相等,则
data=zip(*maReader)
应该这样做。 如果没有:


另请参见。

因为第一行是唯一遇到异常的行,所以这种方法可能比我的更快。我知道有更好的方法,但我的大脑就是不工作。+1
from itertools import izip_longest

list(izip_longest(*f, fillvalue=''))