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

时间:2018-03-12 07:15:30

标签: python arrays

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

该列表与此类似:

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]

3 个答案:

答案 0 :(得分:2)

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

<强>输出:

{{1}}

答案 1 :(得分: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,&#39; g&#39;,5,44,&#39; f&#39;],[1,5,4,&#39; f&#39;,&#39; g&#39;,&#39; g&#39;]]

答案 2 :(得分:0)

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