3

適切な答えが見つからないという問題があります: 2 つのリストをマージしたいが、各オブジェクトの出現回数は同じにしたい EX:

list1 = [2,3,7]
list2 = [2,2,5]

2 つのリストをマージすると、結果は次のようになります。

res = [2,2,3,5,7] #it does not need to be sorted

最初から 3 つの「2」が一緒にあったが、合併後は 2 つの「2」だけになることに注意してください。

私が見つけた最も近いものは、この投稿にあります:元のリストの重複を削除せずに、2 つのリストを結合して重複を削除する

しかし、これは私が望むようには機能しません。

もう一つの例:

l1 = [2]
l2 = [3]
l3 = [2,2]
l4 = [5]
l5 = [2,3]

#after adding all the lists above
result = [2,2,3,5]
4

2 に答える 2

9

あなたの質問を理解しているので、入力リストのいずれかに表示される最大頻度で各数値を結果に表示する必要があります。a を使用しcollections.Counterて個々のリストの頻度を取得し、|演算子を使用してそれらをマージできます。

>>> c = collections.Counter([2, 2, 5])
>>> d = collections.Counter([2, 3, 7])
>>> list((c | d).elements())
[2, 2, 3, 5, 7]

任意の数のリストを結合する関数は次のとおりです。

def merge_max_frequency(*iterables):
    return reduce(operator.or_, map(collections.Counter, iterables)).elements()

この関数は、リストではなく iterable を返します。単純に適用list()してリストを取得します。

于 2013-10-08T11:59:18.753 に答える