0

リストに入れているファイルがあり、そこからいくつかのものを取り出して、別のリストに追加したいのですが (問題はありません)、最初のリストからものを削除するという問題が発生します. 以下は私が試したものですが、元のリストから他のすべてを削除するだけです。

list:
bob     g1  3110
bob     g2  244
bob     g3  -433
greg    fun112  10595
greg    fun113  -1203
greg    fun114  -3049.999
greg    fun115  3808
greg    fun116  320
greg    got112  -600
greg    got113  5958
greg    got114  1249


file1 = open('test','rb').read().splitlines()
file1=sorted(file1)
test_group = ['fun','got']
test= []

for product in file1:
    spt = product.split(",")
    for line in spt:
        if line[:3] in test_group:
            x = test.append(product)
            y = file1.remove(product)

テスト [ ] リストは問題ありません。そこに必要な項目はすべて問題ありませんが、file1 を確認すると、「fun」行と「got」行が 1 行おきに表示されるだけです。

なぜこれは他のすべてのものを取り出すだけなのですか?どうすれば修正できますか?

4

3 に答える 3

10

反復しているリストを変更しようとしないでください! それはうまくいきません!

リストのコピーを作成すると、次のように機能するはずです。

for product in file1[:]:
    spt = product.split(",")
    for line in spt:
        if line[:3] in test_group:
            x = test.append(product)
            y = file1.remove(product)
于 2012-10-16T17:53:39.810 に答える
3

現在繰り返し処理しているオブジェクトを操作したくありません (たとえば、辞書でこれを試みると、実際には例外が発生します)。

また、list.appendadnlist.removeはインプレースであるため、常に返さNoneれるため、結果を何かに割り当てても意味がありません。

私はそれを次のようにします:

with open('test') as fin:
    test = []
    other = []
    rows = (line.split() for line in fin)
    for name, group, value in rows:
        if group[:3] in ('fun', 'got'):
             add = test.append
        else: 
             add = other.append
        add([name, group, value])
于 2012-10-16T18:00:22.400 に答える
0

負の整数が原因である可能性があります。スキップするものとしてそれらを読み取っている可能性がありますか? あなたはそれをテストしましたか?

于 2012-10-16T17:53:06.860 に答える