0

各インデックスがデータ ポイントを表す CSV を読み取ることによって作成されたリストがいくつかあります。そう:

# names = ['name1','name2', 'name3', 'name4']
# data1 = ['1', '2', '3', '4']
# data2 = ['a', 'b', 'c', 'd']

次と同等です。

name1,1,a

特定のデータ ポイントを削除する必要がありますが、最も簡単な方法はインデックスによるものと思われます。

del names[1]
del data1[1]
del data2[1]
# names = ['name1', 'name3', 'name4']

ただし、インデックスを使用してリストを反復処理しており、ループが終了するまでそれらを変更したくありません。私の解決策は、削除するアイテムを一意の文字列に置き換えてから、後で削除することです。

names[1] = 'DELETEME'
data1[1] = 'DELETEME'
data2[1] = 'DELETEME'
# names = ['name1','DELETEME', 'name3', 'name4']

これは健全な慣習ですか、それとも何か他のことをするべきですか?

編集うわー、すべての応答に感謝します。さまざまなアプローチをテストするには、少し時間がかかります。尋ねた人のために、追加のコードスニペットを次に示します。

# read CSV file. create lists
names = ['name1', 'name2', 'name3', 'name4']
data1 = [1, 32.018, 3, 4]
data2 = [5, -22, 6, 7]

# master list of names to look for
master = ['name2', 'name5']

for i,n in enumerate(names):
    # find intersections with master list, get indices
    # ...
    matches = [1] # index of 'names2'

    # iterate through matches
    for m in matches:
         # specify a criterion for deleting/modifying data points
         # example:
        if data1[m] == 32.018 and data2[m] == -22:
            del names[m]
            del data1[m]
            del data2[m]
        # specify additional criteria using additional if statements
        # ...
4

5 に答える 5

1

これは、スキップしたり「削除されたトークン」を使用したりせずに、反復中にエントリを削除する方法です。

i = 0
while i < len(names):
    if CONDITION_FOR_DELETION:
        del names[i]
        del data1[i]
        del data2[i]
    else:
        i += 1
于 2013-03-13T19:53:44.137 に答える
1

削除するインデックスのメモを保持し、他の作業が完了した後に逆の順序で適用することができます。

delete_memo = []
for i in xrange(len(names)):
    if CONDITION_FOR_DELETION:
        delete_memo.append(i)
delete_memo.reverse()
for i in delete_memo:
    del names[i]
    del data1[i]
    del data2[i]
于 2013-03-13T20:14:34.603 に答える
0

それは悪い習慣ではありませんが、あなたがやっている方法ですが、次のように繰り返すことができます:

data = [1, 2, 3, 4, 5]
i = 0
while i < len(data):
    if data[i] == 3:
        del data[i]
    else:
        i += 1

基本的にi、リストからアイテムを削除しない場合にのみ、カウンターを増やします。

于 2013-03-13T19:56:19.997 に答える
0

これは非常に複雑に思えます。キー/値を にハッシュしてdictから、キー/値のペアを削除してみませんか?

>>> tst = {1:3}
>>> del(tst[1])
>>> tst
{}

もちろん、代わりにdictを反復処理する必要があります(インデックスについては心配しません)が、とにかく簡単だと思います

于 2013-03-13T19:42:40.573 に答える
0

必要に応じて、リストのコピーを反復処理することも検討できます。

コード スニペットのコピーを投稿すると、役立つ場合があります。

于 2013-03-13T20:14:38.513 に答える