1

重複を保持しながら別のリストにある場合、リストからアイテムを削除する方法は?

私はこれで成功しましたが、より速い方法はありますか?

x = [1,2,3,4,7,7,5,6,7,8,8]
y = [1,4,5,6,8,9]
z = []
for i in x:
  if i not in y:
   z.append(i)
print z

正しい出力:

[2, 3, 7, 7, 7]

または、リスト内包表記も機能しますが、これらが唯一の方法ですか?

x = [1,2,3,4,7,7,5,6,7,8,8]
y = [1,4,5,6,8,9]
z = [i for i in x if not in y]

set を使用するとはるかに高速ですが、重複は保持されません。

x = [1,2,3,4,7,7,5,6,7,8,8]
y = [1,4,5,6,8,9]
print list(set(x) - set(y))

セット減算により、重複を失う出力が得られました。

[2, 3, 7]
4

1 に答える 1

2

順序が重要でない場合

>>> x = [1,2,3,4,7,7,5,6,7,8,8]
>>> y = [1,4,5,6,8,9]
>>> from collections import Counter
>>> count=Counter(x)
>>> for i in y:
...     del count[i]
... 
>>> list(count.elements())
[2, 3, 7, 7, 7]
于 2013-02-22T11:02:19.400 に答える