私はプログラミングに不慣れで、この正確な質問に答えているように見えるQ&Aをここで見つけることができません(Pythonにはたくさんあり、リストには一致する単語や文字がありますが)。
私はこのような2つのリストを持っています:
list1 = ["INTJ","ENTJ","ESTJ"]
list2 = ["INTP","ESFJ","ISTJ"]
文字ペアの可能な組み合わせは全部で16あります。I / E(1番目)、S / N(2番目)、T / F(3番目)、P / J(4番目)などの文字ペアの完全一致の数を計算することができました。
3文字、2文字、1文字の正確な一致がいくつあるかを追跡するにはどうすればよいですか?3文字の一致のバリエーションの例を次に示します。
ISTP and ISTJ (I + S + T)
INFP and INTP (I + N + P)
このような文字ペアの一致の数を数えることでユーザー@thkangの助けを得ましたが、一致の組み合わせを追跡するためにこのコードを再配置する方法がわかりません。これを達成するために、他の方法でマッチを保存する必要がありますか?
matches = {0:0, 1:0, 2:0, 3:0}
for item1, item2 in zip(list1, list2):
for i in xrange(4):
if item1[i]==item2[i]:
matches[i] += 1
total_letters_compared = #length of a list * 4
total_correct_matches = #sum(matches.values())
nth_letter_pair_matches = #matchs[n-1]
これは私が書いたコードですが、それは単なる悪いコードであることがわかりました。誰かが私がこれを正しくするのを手伝ってくれる?
matches = {0:0, 1:0, 2:0, 3:0}
four_letter_matches = 0
three_letter_matches = 0
two_letter_matches = 0
for item1, item2 in zip(actual, typealyzer):
if item1[0:2] == item2[0:2]\
or item1[0], item1[1], item1[3] == item2[0], item2[1], item2[3]\
or item1[1], item1[2], item1[3] == item2[1], item2[2], item2[3]\
or item1[0], item1[2], item1[3] == item2[0], item2[2], item2[3]:
three_letter_matches = three_letter_matches + 1
elif item1[0:1] == item2[0:1]\
or item1[0], item1[1] == item2[0], item2[1]\
or item1[0], item1[2] == item2[0], item2[2]\
or item1[0], item1[3] == item2[0], item2[3]\
or item1[1], item1[2] == item2[1], item2[2]\
or item1[1], item1[3] == item2[1], item2[3]:
#and so forth...
two_letter_matches = two_letter_matches + 1
#I think I can get the one-letter matches by matches[1] or matches[2] or matches[3] or matches[4]
for i in xrange(4):
if item1[i]==item2[i]:
matches[i] += 1
どういうわけか、3文字、2文字、1文字の一致を別々に印刷できるようにしたい
print str(three_letter_matches)
print str(two_letter_matches)
print str(one_letter_matches)