Mam listę liczb takich jak [1,2,3,4,5...]
, i chcę obliczyć (1+2)/2
, a dla drugiej, (2+3)/2
, a dla trzeciej,
(3+4)/2
, i tak dalej. Jak mogę to zrobić?
Chciałbym zsumować pierwszą liczbę z drugą i podzielić ją przez 2, a następnie zsumować drugą z trzecią i podzielić przez 2, i tak dalej.
Jak również, jak mogę zsumować listę liczb?
a = [1, 2, 3, 4, 5, ...]
Czy to jest:
b = sum(a)
print b
aby uzyskać jeden numer?
To nie działa dla mnie.
Pytanie 1: Więc chcesz (element 0 + element 1) / 2, (element 1 + element 2) / 2, ... itd.
Tworzymy dwie listy: jedną z każdego elementu z wyjątkiem pierwszego, a jedną z każdego elementu z wyjątkiem ostatniego. Następnie średnie, które chcemy, są średnimi każdej pary wziętej z tych dwóch list. Używamy zip
do pobierania par z dwóch list.
Zakładam, że chcesz zobaczyć w wyniku liczby dziesiętne, mimo że wartości wejściowe są liczbami całkowitymi. Domyślnie Python wykonuje dzielenie liczb całkowitych: odrzuca resztę. Aby podzielić wszystko do końca, musimy użyć liczb zmiennoprzecinkowych. Na szczęście, dzieląc liczbę całkowitą przez zmiennoprzecinkową otrzymamy liczbę zmiennoprzecinkową, więc po prostu użyjemy 2.0
jako dzielnika zamiast 2
.
Tak więc:
averages = [(x + y) / 2.0 for (x, y) in zip(my_list[:-1], my_list[1:])]
Pytanie 2:
Takie użycie sum
powinno działać poprawnie. Działa następujące rozwiązanie:
a = range(10)
# [0,1,2,3,4,5,6,7,8,9]
b = sum(a)
print b
# Prints 45
Ponadto, nie musisz przypisywać wszystkiego do zmiennej na każdym kroku po drodze. Polecenie print sum(a)
działa tak samo dobrze.
Będziesz musiał być bardziej konkretny, co dokładnie napisałeś i jak to nie działa.
Sumaryczna lista liczb:
sum(list_of_nums)
Obliczanie połowy z n i n - 1 (jeśli mam poprawny wzór), używając list comprehension:
[(x + (x - 1)) / 2 for x in list_of_nums]
Sumowanie przyległych elementów, np. ((1 + 2) / 2) + ((2 + 3) / 2) + ... przy użyciu reduce i lambdas.
reduce(lambda x, y: (x + y) / 2, list_of_nums)