0

この質問から拡張して、これに対する可能な限り最速の解決策が必要です:

以下を考えると:

m=['abc','bcd','cde','def']
r=[['abc','def'],['bcd','cde'],['abc','def','bcd']]

これらのオブジェクト (または作成された新しいオブジェクト) を編集して、リスト m の各要素について、r のすべてのリストで 2 回未満しか存在しない場合、要素が m から削除され、どこからでも削除されるようにしたいと思います。 r.

したがって、上記の結果は次のようになります。

['abc','bcd','def']

...「cde」は r で 1 回しか見つからないためです。

さらに良いのはこれです:

[2, 2, 1, 2]

...または r のリスト全体での m の要素の頻度のカウント。次に、数値に基づいて、値が特定の基準を満たしている場合、出力のインデックスに基づいて r のリストを編集できます。

たとえば、i <2 または >100 の場合、r の各リストのインデックス i を削除します。

これを行うには回り道がありますが、1 月の糖蜜よりも遅くなります。

私の出発点はこれです:

[[1 if mx in rx else 0 for mx in m] for rx in map(set, r)]

これを生成します:

[[1, 0, 0, 1], [0, 1, 1, 0], [1, 1, 0, 1]]

前もって感謝します!

4

1 に答える 1

2

カウントを取得する行は次のとおりです。

print [sum([1 for _r in r if _m in _r]) for _m in m]

あなたが書いたのと同じ結果が得られます:

[2, 2, 1, 2]
于 2016-11-17T23:54:29.377 に答える