Άθροισμα μιας λίστας αριθμών στην Python

Έχω μια λίστα αριθμών όπως [1,2,3,4,5...], και θέλω να υπολογίσω το (1+2)/2 και για το δεύτερο, το (2+3)/2 και το τρίτο, (3+4)/2, και ούτω καθεξής. Πώς μπορώ να το κάνω αυτό;

Θα ήθελα να αθροίσω τον πρώτο αριθμό με τον δεύτερο και να τον διαιρέσω με το 2, στη συνέχεια να αθροίσω τον δεύτερο με τον τρίτο και να τον διαιρέσω με το 2, και ούτω καθεξής.

Επίσης, πώς μπορώ να αθροίσω μια λίστα αριθμών;

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

Είναι:

b = sum(a)
print b

για να πάρετε έναν αριθμό;

Αυτό δεν λειτουργεί για μένα.

Ερώτηση 1: Άρα θέλετε (στοιχείο 0 + στοιχείο 1) / 2, (στοιχείο 1 + στοιχείο 2) / 2, ... κ.λπ.

Φτιάχνουμε δύο λίστες: μία με κάθε στοιχείο εκτός από το πρώτο και μία με κάθε στοιχείο εκτός από το τελευταίο. Στη συνέχεια, οι μέσοι όροι που θέλουμε είναι οι μέσοι όροι κάθε ζεύγους που λαμβάνονται από τις δύο λίστες. Χρησιμοποιούμε το zip για να πάρουμε ζεύγη από δύο λίστες.

Υποθέτω ότι θέλετε να βλέπετε δεκαδικούς αριθμούς στο αποτέλεσμα, παρόλο που οι τιμές εισόδου σας είναι ακέραιοι αριθμοί. Από προεπιλογή, η Python κάνει διαίρεση ακεραίων: απορρίπτει το υπόλοιπο. Για να διαιρέσουμε τα πράγματα μέχρι τέλους, πρέπει να χρησιμοποιήσουμε αριθμούς κινητής υποδιαστολής. Ευτυχώς, διαιρώντας έναν int με έναν float θα προκύψει ένας float, οπότε απλά χρησιμοποιούμε 2.0 για το διαιρέτη μας αντί για 2.

Έτσι:

averages = [(x + y) / 2.0 for (x, y) in zip(my_list[:-1], my_list[1:])]

Ερώτηση 2:

Αυτή η χρήση του sum θα πρέπει να δουλέψει μια χαρά. Η ακόλουθη μέθοδος λειτουργεί:

a = range(10)
# [0,1,2,3,4,5,6,7,8,9]
b = sum(a)
print b
# Prints 45

Επίσης, δεν χρειάζεται να αναθέτετε τα πάντα σε μια μεταβλητή σε κάθε βήμα στην πορεία. Το print sum(a) λειτουργεί μια χαρά.

Θα πρέπει να γίνετε πιο συγκεκριμένος σχετικά με το τι ακριβώς γράψατε και πώς δεν λειτουργεί.

Σχόλια (4)

Αθροιστική λίστα αριθμών:

sum(list_of_nums)

Υπολογισμός του μισού του n και του n - 1 (αν έχω το μοτίβο σωστά), χρησιμοποιώντας μια λίστα κατανόησης:

[(x + (x - 1)) / 2 for x in list_of_nums]

Άθροισμα γειτονικών στοιχείων, π.χ. ((1 + 2) / 2) + ((2 + 3) / 2) + ... χρησιμοποιώντας reduce και lambdas.

reduce(lambda x, y: (x + y) / 2, list_of_nums)
Σχόλια (3)

Δοκιμάστε να χρησιμοποιήσετε την κατανόηση μιας λίστας. Κάτι σαν:

new_list = [(old_list[i] + old_list[i+1])/2 for i in range(len(old_list-1))]
Σχόλια (2)