447 Stimmen

Summieren einer Liste von Zahlen in Python

Ich habe eine Liste von Nummern wie [1,2,3,4,5...] und ich möchte Folgendes berechnen (1+2)/2 und für die zweite, (2+3)/2 und die dritte, (3+4)/2 , und so weiter. Wie kann ich das tun?

Ich möchte die erste Zahl mit der zweiten addieren und durch 2 dividieren, dann die zweite mit der dritten addieren und durch 2 dividieren, und so weiter.

Außerdem: Wie kann ich eine Liste von Zahlen zusammenfassen?

a = [1, 2, 3, 4, 5, ...]

Ist es:

b = sum(a)
print b

um eine Nummer zu bekommen?

Das funktioniert bei mir nicht.

2voto

vijayraj34 Punkte 1408

Das Gleiche können Sie auch mit Hilfe der Rekursion tun:

Python-Schnipsel:

def sumOfArray(arr, startIndex):
    size = len(arr)
    if size == startIndex:  # To Check empty list
        return 0
    elif startIndex == (size - 1): # To Check Last Value
        return arr[startIndex]
    else:
        return arr[startIndex] + sumOfArray(arr, startIndex + 1)

print(sumOfArray([1,2,3,4,5], 0))

2voto

Michael J. Barber Punkte 23764

Kurz und einfach:

def ave(x,y):
  return (x + y) / 2.0

map(ave, a[:-1], a[1:])

Und so sieht es aus:

>>> a = range(10)
>>> map(ave, a[:-1], a[1:])
[0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5]

Aufgrund einer Dummheit in der Art und Weise, wie Python mit einer map über zwei Listen, müssen Sie die Liste abkürzen, a[:-1] . Es funktioniert eher so, wie Sie es erwarten würden, wenn Sie itertools.imap :

>>> import itertools
>>> itertools.imap(ave, a, a[1:])
<itertools.imap object at 0x1005c3990>
>>> list(_)
[0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5]

1voto

Samueltommzy Punkte 19

Führen Sie eine Schleife durch die Elemente in der Liste und aktualisieren Sie die Gesamtsumme wie folgt:

def sum(a):
    total = 0
    index = 0
    while index < len(a):
        total = total + a[index]
        index = index + 1
    return total

1voto

Aashutosh jha Punkte 486

Ich benutze eine while Schleife, um das Ergebnis zu erhalten:

i = 0
while i < len(a)-1:
   result = (a[i]+a[i+1])/2
   print result
   i +=1

1voto

StickySli Punkte 81

Dank an Karl Knechtel Ich konnte Ihre Frage verstehen. Meine Interpretation:

  1. Sie wollen eine neue Liste mit dem Durchschnitt der Elemente i und i+1.
  2. Sie wollen jedes Element der Liste summieren.

Erste Frage mit anonymer Funktion (auch bekannt als Lambda-Funktion):

s = lambda l: [(l[0]+l[1])/2.] + s(l[1:]) if len(l)>1 else []  #assuming you want result as float
s = lambda l: [(l[0]+l[1])//2] + s(l[1:]) if len(l)>1 else []  #assuming you want floor result

Zweite Frage auch mit anonymer Funktion (aka. Lambda-Funktion):

p = lambda l: l[0] + p(l[1:]) if l!=[] else 0

Beide Fragen in einer einzigen Code-Zeile zusammengefasst:

s = lambda l: (l[0]+l[1])/2. + s(l[1:]) if len(l)>1 else 0  #assuming you want result as float
s = lambda l: (l[0]+l[1])/2. + s(l[1:]) if len(l)>1 else 0  #assuming you want floor result

Verwenden Sie diejenige, die Ihren Bedürfnissen am besten entspricht

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X