Ich versuche, eine Liste von Zahlen zu durchlaufen und die Summe des aktuellen Elements und des vorherigen Elements mit Python zu drucken. Beispielsweise,

Bei numbers = [5,10,15,20,25,30,30] sollte die Ausgabe 5, 15, 25, 35, 45, 55, 60, sein. Dies ist der folgende Code, den ich ausprobiert habe. Er kommt der Antwort sehr nahe, aber das erste Element ist falsch.

numbers = [5, 10, 15, 20, 25, 30, 30]

i = 0
for x in range(1, 8):
    print(numbers[i] + numbers[i - 1], end=", ")
    i += 1

Ich erhalte die Ausgabe 35, 15, 25, 35, 45, 55, 60,. Was mache ich falsch?

0
JavaGelp 8 Feb. 2020 im 03:15

6 Antworten

Beste Antwort

Sie beginnen am Index 0, wo Ihre beabsichtigte Ausgabe anscheinend am Index 1 beginnt:

Hier ist eine bessere Lösung:

numbers = [5, 10, 15, 20, 25, 30, 30]

for i in range(len(numbers)):
    if i == 0:
        print(numbers[i])
    else:
        print(numbers[i - 1] + numbers[i])

Ausgänge:

5
15
25
35
45
55
60
2
Felipe 8 Feb. 2020 im 00:19

Sie können benachbarte Elemente von numbers koppeln, indem Sie sie mit sich selbst komprimieren, aber eines mit einem 0 auffüllen, sodass Sie die Paare durchlaufen können, um die Summen in einem Listenverständnis auszugeben:

[a + b for a, b in zip([0] + numbers, numbers)]

Oder indem Sie die Paare der Funktion sum zuordnen:

list(map(sum, zip([0] + numbers, numbers)))

Beide würden zurückkehren:

[5, 15, 25, 35, 45, 55, 60]
5
blhsing 8 Feb. 2020 im 00:53

Das sollte funktionieren:

numbers = [5, 10, 15, 20, 25, 30, 30]

output = [numbers[i]+numbers[i-1] if i > 0 else numbers[i] for i in range(len(numbers))]
print(output)
0
aminrd 8 Feb. 2020 im 00:22

Sie beginnen bei i = 0. Die erste Zahl, die Sie hinzufügen, ist die 0 und die -1 (in diesem Fall die letzte). Deshalb erhalten Sie die 35 (5+30).

0
Borja 8 Feb. 2020 im 00:20

Betrüge und füge am Anfang ein [0] hinzu, um zu verhindern, dass die erste Summe falsch ist. Am Ende treten jedoch Probleme auf, da die Liste in enumerate dann ein Element länger als das Original ist. Entfernen Sie daher auch die letzte Nummer:

print ([a+numbers[index] for index,a in enumerate([0]+numbers[:-1])])

Ergebnis:

[5, 15, 25, 35, 45, 55, 60]

Wenn Sie sehen möchten, wie es funktioniert, drucken Sie die Originalnummern vor dem Hinzufügen:

>>> print ([(a,numbers[index]) for index,a in enumerate([0]+numbers[:-1])])
[(0, 5), (5, 10), (10, 15), (15, 20), (20, 25), (25, 30), (30, 30)]

Das enumerate durchläuft die geänderte Liste [0, 5, 15, .. 55], in der alles um eine Stelle nach oben verschoben wird, aber numbers[index] immer noch den korrekten Index aus dem Original Liste. Addiert man sie, ergibt sich das richtige Ergebnis.

0
usr2564301 8 Feb. 2020 im 00:30

Dieses Listenverständnis funktioniert:

numbers = [5, 10, 15, 20, 25, 30, 30]

output = [value + numbers[i-1] if i else value for i, value in enumerate(numbers)]
print(output)

>>> [5, 15, 25, 35, 45, 55, 60]
0
Marcos 8 Feb. 2020 im 00:29