Jeg har en liste med tall som [1,2,3,4,5...]
, og jeg ønsker å beregne (1+2)/2
og for den andre, (2+3)/2
og den tredje,
(3+4)/2
, og så videre. Hvordan kan jeg gjøre det?
Jeg vil gjerne summere det første tallet med det andre og dividere med 2, deretter summere det andre med det tredje og dividere med 2, og så videre.
Hvordan kan jeg også summere en liste med tall?
a = [1, 2, 3, 4, 5, ...]
Er det det?
b = sum(a)
print b
for å få ett tall?
Dette fungerer ikke for meg.
Spørsmål 1: Du vil altså ha (element 0 + element 1) / 2, (element 1 + element 2) / 2, ... osv.
Vi lager to lister: én for hvert element unntatt det første, og én for hvert element unntatt det siste. De gjennomsnittene vi ønsker, er gjennomsnittene av hvert par fra de to listene. Vi bruker zip
til å ta par fra to lister.
Jeg antar at du vil se desimaltall i resultatet, selv om inngangsverdiene er heltall. Som standard dividerer Python med heltall: den forkaster resten. For å dividere hele veien, må vi bruke flytende tall. Heldigvis får vi et flyttall når vi dividerer en int med en float, så vi bruker bare 2.0
som divisor i stedet for 2
.
Dermed får vi
averages = [(x + y) / 2.0 for (x, y) in zip(my_list[:-1], my_list[1:])]
Spørsmål 2:
Denne bruken av sum
skal fungere fint. Følgende fungerer:
a = range(10)
# [0,1,2,3,4,5,6,7,8,9]
b = sum(a)
print b
# Prints 45
Du trenger heller ikke å tilordne alt til en variabel for hvert trinn underveis. print sum(a)
fungerer helt fint.
Du må være mer spesifikk om nøyaktig hva du har skrevet og hvorfor det ikke fungerer.
Summen av tall:
sum(list_of_nums)
Beregner halvparten av n og n - 1 (hvis jeg har forstått mønsteret riktig) ved hjelp av en list comprehension:
[(x + (x - 1)) / 2 for x in list_of_nums]
Summere tilstøtende elementer, f.eks. ((1 + 2) / 2) + ((2 + 3) / 2) + ... ved hjelp av reduce og lambdas.
reduce(lambda x, y: (x + y) / 2, list_of_nums)