循环通过2d数组删除元素,索引错误,python

问题描述 投票:0回答:3

我试图删除名为报告信息拆分列表的空元素,但保持列表超出范围错误。

该列表看起来类似于:

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]
python arrays
3个回答
0
投票

使用列表推导

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


2
投票

您可以使用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']]

0
投票

你正在检查jj<=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]
© www.soinside.com 2019 - 2024. All rights reserved.