在二维数组中循环删除元素,索引错误,python

2024-09-26 22:10:58 发布

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

我正在尝试删除名为report info split的列表中的空元素,但不断获取列表超出范围的错误。你知道吗

列表类似于:

reportinfosplit = [[1,,g,5,44,f][1,5,4,f,g,,g]]

我在一维数组中找到了很多答案,但在二维数组中没有。有没有办法防止索引超出范围?列表元素的大小不尽相同,我想这就是原因所在,但在我将它们设置为相同的长度之后,这种情况一直在发生。你知道吗

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]

Tags: 答案inreportinfo元素列表forlen
3条回答

使用列表理解

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

您正在检查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]

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

相关问题 更多 >

    热门问题