2016-12-09 7 views
0

Ich habe die Funktion, die den Abstand zwischen zwei Strings berechnet, aber ich muss eine Funktion schreiben, die Abstand von zwei Strings findet, die die Werte sind ein Wörterbuch. Jeder Wert muss Abstand zwischen sich selbst, dem nächsten Wert und dem Wert danach finden. Die Funktion, die die Entfernung berechnet ist:Abstand zwischen zwei Strings, die Werte in einem Wörterbuch sind, und Drucken mit entsprechenden Schlüssel

def computeDistance(seq1,seq2): 

    num_difference = 0.0 

    m=0.0 

    for i in range(0,10): 

     if seq1[i] != seq2[i]: 

     num_difference += 1 

     m=num_difference/(len(seq1)) 

return m 

der Eingang so etwas wie

S = {'S01'='agcagagtta','S1111'='ccgccctagt','S001'='cgtgatgcat'} 

der Ausgang sein wird, sollte wie:

S01 - S1111 : 1.0 

S01 - S001 : 0.8 

S1111 - S001 : 0.8 
+0

können Sie Ihren Code neu formatiert, die Einrückung für die for-Schleife und if-Anweisung sind nicht richtig. Kannst du auch klarstellen, was du mit Abstand meinst? – Navidad20

+0

mit Abstand ich meinte die Anzahl der Änderungen zwischen zwei Strings, wie unterschiedlich sie sind – Aiswarya

Antwort

0
S = {'S01':'agcagagtta','S1111':'ccgccctagt','S001':'cgtgatgcat'} 
keys = [] 
for k1, v1 in S.iteritems(): 
    d = 0 
    lv1 = len(v1) 
    for k2, v2 in S.iteritems(): 
     if k1 != k2 and k2 not in keys: 
      #print [v1[e]!=v2[e] for e in range(lv1)],([v1[e]!=v2[e] for e in range(lv1)].count(True)), lv1 
      d = [v1[e]!=v2[e] for e in range(lv1)].count(True)/float(lv1) 
      print "%s - %s: %s" % (k1,k2,d) 
    keys.append(k1) 
Verwandte Themen