5

I have two lists like so

found = ['CG', 'E6', 'E1', 'E2', 'E4', 'L2', 'E7', 'E5', 'L1', 'E2BS', 'E2BS', 'E2BS', 'E2', 'E1^E4', 'E5']
expected = ['E1', 'E2', 'E4', 'E1^E4', 'E6', 'E7', 'L1', 'L2', 'CG', 'E2BS', 'E3']

I want to find the differences between both lists.
I have done

list(set(expected)-set(found))

and

list(set(found)-set(expected))

Which returns ['E3'] and ['E5'] respectively.

However, the answers I need are:

'E3' is missing from found.
'E5' is missing from expected.
There are 2 copies of 'E5' in found.
There are 3 copies of 'E2BS' in found.
There are 2 copies of 'E2' in found.

Any help/suggestions are welcome!

4

3 に答える 3

4

独自のソリューションを展開する代わりに 、PythonsetクラスCounterクラスを活用します。

  1. symmetric_difference: 両方ではなく、どちらか一方のセットに含まれる要素を検索します。
  2. intersection: 2 つのセットに共通する要素を検索します。
  3. difference: これは基本的に、あるセットを別のセットから減算することによって行ったことです。

コード例

  • found.difference(expected) # set(['E5'])
    
  • expected.difference(found) # set(['E3'])
    
  • found.symmetric_difference(expected) # set(['E5', 'E3'])
    
  • オブジェクトのコピーを見つける:この質問は既に参照されています。その手法を使用すると、すべての重複が得られ、結果のCounterオブジェクトを使用して、重複の数を見つけることができます。例えば:

    collections.Counter(found)['E5'] # 2
    
于 2013-04-21T03:01:01.390 に答える
2

最初の 2 つはすでに回答済みです。

print('{0} missing from found'.format(list(set(expected) - set(found)))
print('{0} missing from expected'.format(list(set(found) - set(expected)))

2 番目の 2 つは、リスト内の重複をカウントすることを検討する必要があります。これについては、オンラインで多くの解決策が見つかります (これを含む:リスト内の重複を検索して一覧表示しますか? )。

于 2013-04-21T02:59:34.687 に答える