Zliczanie elementów na tych samych pozycjach w Pythonie

0

Mam takie zadanie:

Odległość Hamminga dH(s1,s2) między dwoma sekwencjami s1, s2 o takiej samej długości równa się liczbie niepokrywających się symboli. Na przykład dla dwóch poniższych sekwencji:

 # GAGCCTACTAACGGGAT
 # x|x|x||x|x||||xx|
 # CATCGTAATGACGGCCT

odległość ta wynosi: dH(s1,s2) = 7

{*} Napisać funkcje zwracającą odległość Hamminga

Czyli mam zrobić funkcje, która napisze mi ile jest takich różnych literek jest na tych samych miejscach i właśnie tu jest problem z tymi miejscami, bo ile jest takich różnych ogólnie (bez miejsc) to łatwo, ale jak zrobić coś takiego, że zlicza mi ile jest różnych literek, ale w tych samych miejscach np. na pierwszym miejscu
mam G, a na drugiej C, więc się wlicza, na drugim miejscu mam A i A, więc się nie wlicza

text1 = input("Wpisz pierwszą sekwencje")
list1 = list(text1)
text2 = input("Wpisz drugą sekwencję")
list2 = list(text2)
list3 = []
for i in list1:
    for j in list2:
        if i[0] != j[0]:
            list3.append(i)
print(list3)
print(len(list3))

no i jak w tej pętli for to zrobić, żeby robiło coś takiego

if i[0] != j[0]:
list3.append(i)
i tak do
i[n] j[n]
1

Poczytaj o funkcji zip i Spróbuj rozwiązać. Jak nie Dasz rady to Wróć tu.

2

Jeżeli masz zliczyć liczbę różnic miedzy dwom równie długimi stringami to nie rozumiem dwóch rzeczy.

  1. po co zbierać literki w list3, wystarczy tylko wiedzieć ile ich jest
  2. po co dwie pętle wystarczy jedna iterująca od 0 do len(text1) - 1 i sprawdzenie text1[i] != text1[i]
1

Dałeś łapkę w górę, znaczy, że Zaimplentowałeś z zipem(?). To się Pochwal i odznacz, nie będą ludzie klikać widząc, że rozwiązane.

1
In [1]: str1='GAGCCTACTAACGGGAT'

In [2]: str2='CATCGTAATGACGGCCT'

In [3]: zipped = zip(str1, str2)

In [4]: ham_distance=0

In [5]: for item in zipped:
   ...:     if item[0]!=item[1]:
   ...:         ham_distance+=1

In [6]: ham_distance
Out[6]: 7
2
def hamming_dist(s1, s2):
    return sum(ch1 != ch2 for ch1, ch2 in zip(s1, s2))
0
lion137 napisał(a):
def hamming_dist(s1, s2):
    return sum(ch1 != ch2 for ch1, ch2 in zip(s1, s2))

Sory, że wczoraj tego nie zrobiłem, ale zmęczony byłem i poszedłem spać. Wielkie dzięki za podpowiedź, ja to zrobiłem tak.

def ham_dist():
    str1 = str(input("Wpisz sekwencje numer 1"))
    str2 = str(input("Wpisz sekwencje numer 2"))
    zipped = zip(str1, str2)
    ham_distance = 0
    for x in zipped:
        if x[0] != x[1]:
            ham_distance += 1
    print(ham_distance)
ham_dist()

Fajny jest twój kod taki krótki, a tak dużo robi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1