2017-06-29 2 views
0

Im Grunde versuche ich 2 Elemente in einer Liste zu finden, die sich zu der richtigen gegebenen Summe addiert.Wie man Listen durchläuft und Summen zwischen zwei Zahlen vergleicht und schließlich die Antwort mit der nächsten Indexgruppierung zurückgibt?

Beispiel:

aList = [1,5,6,3,8,9,4] sum = 10 

jetzt mit den oben genannten Bedingungen werde ich 2 Ergebnisse erwarten:

[1, 9] and [6, 4] 

Die Antwort sollte [6, 4], weil sie sich am nächsten sind. 1 bis 9 müssen 4 Schritte ausführen, während [6, 4] nur 3 Schritte benötigen. Kürzeste Indexunterschiede.

Mein Code ist unten und es für das obige Beispiel funktioniert nicht:

def sum_pairs(ints, s): 
for i in ints: 
    for b in ints[i:]: 
     if i + b == s: 
      return [i,b] 
else: 
    return None 

Wie würden Sie zwischen am nächsten Index überprüfen Sie mit aus einem weiteren Schleife zu schreiben?

+0

Haben Sie eine Fehlermeldung erhalten? – lkdhruw

+0

Wenn ich mich nicht irre, ist das Problem nicht, dass der Code "nicht funktioniert" in dem Sinne, dass es bei der Ausführung versagt; das Problem ist, dass es das erste "funktionierende" Paar zurückgibt, nicht das, was am nächsten ist ... – Archeo

+0

@Archeo ja Sie sind richtig, es funktioniert, aber gibt nicht das nächste Indexpaar zurück. Danke für das Aufklären. –

Antwort

1

Wenn Sie Zahlen mit möglichst vielen Schritten finden möchten, durchlaufen Sie die Entfernung und versuchen Sie alle Tupel mit der angegebenen Distanz dazwischen - Sie sollten keine Paare mit 4 Leerzeichen dazwischen versuchen, wenn Sie nicht alle Tupel mit Abstand ausgeschöpft haben 3 ...

def sum_pairs(ints, s): 
    for distance in range(1, len(ints)): 
     for idx in range(len(ints) - distance): 
      if ints[idx] + ints[idx + distance] == s: 
       return [ints[idx], ints[idx + distance]] 
    return None 
0

eine „einfache“ (nicht am effizientesten - Neue gepostet Antwort sehen: eine Schleife Hinzufügen von bis zu, verfahren, indem Leerzeichen zwischen den Zeichen suchen, ist besser) Lösung:

def sum_pairs(ints, s): 
    answer = None 
    distance = 10 
    for i in ints: 
     for b in ints[i:]: 
      if i + b == s and abs(i - b) < distance: 
       answer = (i, b) 
       distance = abs(i - b) 
return answer 
0

Sie müssen alle möglichen Lösungen in der Liste vor retu speichern etwas machen.

a = [] 
def sum_pairs(ints, s): 
    for i in ints: 
     for b in ints[i:]: 
      if i + b == s: 
       a.append([i,b]) 
    return a 

aList = [1,5,6,3,8,9,4] 

print sum_pairs(aList,10) 

Ausgang: [[1, 9], [6, 4]]

0

Sie waren wirklich nicht zu testen, um die Unterschiede zwischen den Paaren, die Sie haben, einfach die Liste aller für die Summe von Ihnen eingegebenen Treffer zurück.

nums = [1,5,6,3,8,9,4] 

def sum_pairs(ints, s): 
    matches = [] 
    for i in range(len(ints)): 
    x = ints[i] 
    for y in ints[i + 1:]: 
     if x + y == s: matches.append([x, y]) 
    differences = {} 
    for x, y in matches: 
    differences[abs(x - y)] = [x, y] 
    return differences[min(differences.keys())] 

>>> sum_pairs(nums, 10) 
# [6, 4] 
Verwandte Themen