2016-12-06 5 views
1

2つのリストがあり、リスト内の要素が完全一致である回数のカウントが必要は同じです別のリストとしての位置。だから、例えば:リスト内の要素が別のリストと完全に一致する回数を計算するには -

list1 = [1,2,3,4] 
list2 = [1,2,4,3] 

2. を返します私は、次のコードを持っている:

count = 0 
def corrpos(list1, list2, count): 
    if list1[0] == list2[0]: 
      count = 1 
    return count 

これは最初の要素を比較するために動作しますが、私はそれがすべてのトラックを保つようにする方法がわかりませんよ要素。任意のヒント?

+1

あなたは 'count' – depperm

答えて

0

もう一つの方法は、セットを使用して、これら二つのリストの交差点を参照してくださいです:

>>>set(list1) & set(list2) 
set([1, 2, 3, 4]) 

次に、あなただけのカウントを取得するためにlen機能を使用することができます。

>>>len(set(list1) & set(list2)) 
4 

アップデート:

要素が同じインデックス位置になければならないことを考えると、私はリストを使用します読解:ここ

def corrpos(list1,list2): 
    return len([i for (c,i) in enumerate(list1) if list2[c]==i]) 

enumerate機能はをごループとしてインデックスの場所を追跡しますを使用して、list2の対応する値をルックアップすることができます。

あなたがforループを使用したい場合は、これはのように書き換えることができます。完全を期すために

def corrpos(list1,list2): 
    count=0 
    for (c,i) in enumerate(list1): 
     if list2[c]==i: count+=1 
    return count 
1

あなたはリスト内包を作るとlenを(使用してリスト2に存在したリスト1の要素の数を計算することができます):独自のコードにも取り組んでいる

print len([x for x in list1 if x in list2]) 

、あなただけの数を返すために必要があります(とLIST2に正しくパラメータの入力を変更):あなたがこれを行うことが

return count 
+0

を返すされていないか、またはあなたがセットを作成することができます。 'print(len(set(list1).intersection(set(list2))))')を実行します。 – Matthias

+0

list1とlist2の両方に存在する値の数を計算する場合は、set indeedを使用する必要があります。 –

1

Iは、内蔵zipを使用して答え、そう@が提供する最後の答えを提案しますそれは本当に多くのものを提供していませんでしたが、zipを使用すると、2回の反復可能オブジェクトの「同時期に」反復処理することができ、私はこの方法を使用するよりも、より直感的だと思い

def corrpos(list1, list2): 
    count = 0 
    for elem1, elem2 in zip(list1, list2): 
     if elem1 == elem2: 
      count += 1 
    return count 

:LMCは、以下のように書き換えることができますのインデックス最初のリストの要素をenumerateの例のように2番目のリストから選択します。もちろん

、また、他の回答のようにonelinerように書き換えることができます。

def corrpos(list1, list2): 
    return sum(1 for elem1, elem2 in zip(list1, list2) if elem1 == elem2) 

または

def corrpos(list1, list2): 
    return len([True for elem1, elem2 in zip(list1, list2) if elem1 == elem2]) 
関連する問題