-1

私は2つのリストを持っています

first = ['-6.50', '-7.00', '-6.00', '-7.50', '-5.50', '-4.50', '-4.00', '-5.00'] 
second = ['-7.50', '-4.50', '-4.00']

リストfirstに出現するすべての要素で短縮したい。second

for i in first:
    for j in second:
        if i == j:
            first.remove(i)

これが削除されなかった理由がわからない-4.00

['-6.50', '-7.00', '-6.00', '-5.50', '-4.00', '-5.00']

どんな助けでも感謝します:)

4

5 に答える 5

3
>>> first = ['-6.50', '-7.00', '-6.00', '-7.50', '-5.50', '-4.50', '-4.00', '-5.00']
>>> second = ['-7.50', '-4.50', '-4.00']
>>> set_second = set(second) # the set is for fast O(1) amortized lookup
>>> [x for x in first if x not in set_second]
['-6.50', '-7.00', '-6.00', '-5.50', '-5.00']
于 2013-04-30T08:49:29.003 に答える
2

反復しているシーケンスを変更しないでください。

これを行う最短の方法:

list(set(first) - set(second))
于 2013-04-30T08:50:48.943 に答える
1

-4.00このコードを試すと、が並んでいないことがわかります。

for i in first:
    for j in second:
        print i,j,
        if i == j:
            print 'removed'
            first.remove(i)
        else:
            print
  • 反復しているシーケンスを変更しないでください。

問題を解決するには、リストのコピーを作成するだけです。これは、次を追加することで実行できます[:]

for i in first[:]:
    for j in second[:]:
        if i == j:
            first.remove(i)

これを行う別の方法は次のとおりです。

[i for i in first if i not in second]
于 2013-04-30T08:54:19.723 に答える