我试图删除名为报告信息拆分列表的空元素,但保持列表超出范围错误。
该列表看起来类似于:
reportinfosplit = [[1,,g,5,44,f][1,5,4,f,g,,g]]
我已经为1d阵列找到了很多答案但不是2d。有没有办法阻止索引超出范围?列表元素的大小并不完全相同,我认为这就是原因,但是在我将它们设置为相同的长度后,它仍然会发生。
for i in range(len(reportinfosplit)):
for j in range(len(reportinfosplit[i])):
if(j<=len(reportinfosplit[i])):
if reportinfosplit[i][j] == "":
del reportinfosplit[i][j]
使用列表推导
reportinfosplit = [[1,"",'g',5,44,'f'],[1,5,4,'f','g',"",'g']]
for ix, i in enumerate(reportinfosplit):
reportinfosplit[ix] = [val for val in i if val != '']
print(reportinfosplit)
[[1,'g',5,44,'f'],[1,5,4,'f','g','g']]
您可以使用filter
从列表中删除空值
reportinfosplit = [[1,"","g",5,44,"f"],[1,5,4,"f","g","","g"]]
print([filter(None, i) for i in reportinfosplit]) #Python3 print([list(filter(None, i)) for i in reportinfosplit])
输出:
[[1, 'g', 5, 44, 'f'], [1, 5, 4, 'f', 'g', 'g']]
你正在检查j
的j<=len(reportinfosplit[i])
,这导致j
能够变得与reportinfosplit[i]
的当前长度一样大(这是可能的,因为reportinfosplit[i]
的当前长度发生了变化)。试试这样:
for i in range(len(reportinfosplit)):
for j in range(len(reportinfosplit[i])):
if(j<len(reportinfosplit[i])):
if reportinfosplit[i][j] == "":
del reportinfosplit[i][j]