1

私は次のようなリストを持っていました:

l = [[(3,4)], [(3,7)], [(3,8)]]

この関数を使用しchain()てリストをフラット化しましたが、次のようなリストがあります。

l2 = [3,4,3,7,3,8]

重複するアイテムを別のリストに分けたい:

l3 = [3,3,3]
l4 = [4,7,8]

この関数を使用しましたset()が、重複したアイテムが破棄され、次の結果になりました。

l3 = [4,7,8]

でも両方を別々に入手したい

4

2 に答える 2

7

何らかのカウントを行う必要があります。collections.Counter()クラスを使用すると、それが簡単になります。

from collections import Counter
counts = Counter(main_list)

duplicate_list, unique_list = [], []
for entry in main_list:
    if counts[entry] > 1:
        duplicate_list.append(entry)
    else:
        unique_list.append(entry)

countsマルチセットまたはバッグです。entry からその count in へのマッピングmain_list。上記の例では、 の順序が保持されmain_listます。

于 2013-03-01T10:17:50.003 に答える
0

@Martijn Pieters の回答を拡張するには、ifilter を使用して、ラムダ式 (ifilter の最初の引数) の条件に一致するものを除外できます。

from collections import Counter
from itertools import ifilter

counts = Counter(l2)    

l3 = list(ifilter(lambda x: counts[x] > 1, l2))
l4 = list(ifilter(lambda x: counts[x] == 1, l2))
于 2013-03-01T10:39:27.850 に答える