我正在尝试删除名为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]
答案 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]