附加到python中行/列长度未知的2D列表
我想翻转2D列表上的行和列,但遇到了麻烦。Python不允许将值分配给未初始化的“单元格”。我不知道如何初始化我的网格,因为我提前不知道长度。以下是:附加到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):
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=''))