コレクションタイプにセットを使用しているため、この問題が発生しています。セットには2つの特徴があります。順序付けされていない(ここでは重要ではありません)ことと、要素が一意であることです。したがって、それらをセットに変換すると、それらの共通部分を見つける前に、リスト内の重複が失われます。
>>> p = ['1', '2', '3', '3', '3', '3', '3']
>>> set(p)
set(['1', '2', '3'])
ここで実行しようとしていることを実行する方法はいくつかありますが、まずはlistcount
メソッドを確認することから始めます。私はこのようなことをします:
>>> list1 = ['a', 'b', 'c']
>>> list2 = ['a', 'b', 'c', 'c', 'c']
>>> results = {}
>>> for i in list1:
results[i] = list2.count(i)
>>> results
{'a': 1, 'c': 3, 'b': 1}
このアプローチでは、辞書(results
)を作成し、の要素ごとにlist1
、のキーを作成し、results
で発生する回数をカウントして、それlist2
をキーの値に割り当てます。
編集: Lattywareが指摘しているように、そのアプローチはあなたが尋ねたものとは少し異なる質問を解決します。本当に基本的な解決策は次のようになります
>>> words = ['red', 'blue', 'yellow', 'black']
>>> list1 = ['the', 'black', 'dog']
>>> list2 = ['the', 'blue', 'blue', 'dog']
>>> results1 = 0
>>> results2 = 0
>>> for w in words:
results1 += list1.count(w)
results2 += list2.count(w)
>>> results1
1
>>> results2
2
これは、私の最初の提案と同じように機能します。メインリスト(ここでは使用します)の各単語を繰り返し処理し、カウンターとwords
に表示される回数を追加します。list1
results1
list2
results2
重複の数だけでなく、より多くの情報が必要な場合は、辞書を使用するか、モジュールCounter
内の特殊なタイプを使用することをお勧めします。collections
カウンターは、上記の例で行ったすべてのことを簡単にするために構築されています。
>>> from collections import Counter
>>> results3 = Counter()
>>> for w in words:
results3[w] = list2.count(w)
>>> results3
Counter({'blue': 2, 'black': 0, 'yellow': 0, 'red': 0})
>>> sum(results3.values())
2