0

そのため、いくつかのヘッダーの 1 つを使用して、Excel シートから取得した 2D 配列のすべての要素を削除しようとしています。値は、私のデータを含む 2D 配列です。私の主な問題の 1 つは、すべての行の最後の列に削除する必要があるものがあるわけではなく、多くのインデックス範囲外エラーが発生することです。2D 配列の最初の次元は行であることに注意してください。

badColumns = ['Queue', 'Subject', 'Risk', etc...] #Some other ones are here

for col in range(len(values[0])):
    for badText in badColumns:
        if badText in values[0][col]:
            for row in range(len(values)):
                try:
                    del values[row][col]
                except IndexError:
                    continue

del ステートメントの周りに print ステートメントを投げても、del ステートメントに変化はありません。何がこれを引き起こす可能性がありますか?助けてくれてありがとう。

4

2 に答える 2

1

It looks like you're modifying the list as you work your way through it, which leads to problems. Based on what you've shared this doesn't explain all your problems but it should help.

Run this code as an example of what you're problem is; I'd be happy to help more if this doesn't make the problem clear:

#Bad Code:

a = range(6)
print a
for i in range(len(a)):
    try:
        del a[i]
    except IndexError:
        print 'Bad index', i
print a

Output:

[0, 1, 2, 3, 4, 5]
Bad index 3
Bad index 4
Bad index 5
[1, 3, 5]

This code is better: (well maybe? not very pythonic, but it works...)

a = range(6)
print a
for i in range(len(a))[::-1]: #the only difference is this reversal
    try:
        del a[i]
    except IndexError:
        print 'Bad index', i
print a

Output:

[0, 1, 2, 3, 4, 5]
[]

Here's what's happening in the bad code:

First, a = [0,1,2,3,4,5]

Then, i = 0

Now a[i] is deleted, so a = [1,2,3,4,5]

Then, i=1

Now a[i] is deleted, so the element at index 1 is deleted, not index 0

Thus, now a = [1,3,4,5] and you've skipped deleting the element "1"

于 2013-06-03T21:29:36.863 に答える