Ik heb een lijst met getallen zoals [1,2,3,4,5...]
, en ik wil berekenen (1+2)/2
en voor de tweede, (2+3)/2
en de derde,
(3+4)/2
, enzovoort. Hoe kan ik dat doen?
Ik zou het eerste getal willen optellen met het tweede en delen door 2, dan het tweede optellen met het derde en delen door 2, enzovoort.
En hoe kan ik een lijst van getallen optellen?
a = [1, 2, 3, 4, 5, ...]
Is het:
b = sum(a)
print b
om een nummer te krijgen?
Dit werkt niet voor mij.
Vraag 1: Dus je wilt (element 0 + element 1) / 2, (element 1 + element 2) / 2, ... enz.
We maken twee lijsten: één van elk element behalve het eerste, en één van elk element behalve het laatste. Dan zijn de gemiddelden die we willen de gemiddelden van elk paar uit de twee lijsten. We gebruiken zip
om paren uit twee lijsten te nemen.
Ik neem aan dat je decimalen wilt zien in het resultaat, ook al zijn je invoerwaarden gehele getallen. Standaard deelt Python door gehele getallen: de rest wordt weggegooid. Om helemaal door te delen, moeten we floating-point getallen gebruiken. Gelukkig levert het delen van een int door een float een float op, dus we gebruiken gewoon 2.0
voor onze deler in plaats van 2
.
Dus:
averages = [(x + y) / 2.0 for (x, y) in zip(my_list[:-1], my_list[1:])]
Vraag 2:
Dat gebruik van sum
zou prima moeten werken. Het volgende werkt:
a = range(10)
# [0,1,2,3,4,5,6,7,8,9]
b = sum(a)
print b
# Prints 45
Ook hoef je niet bij elke stap onderweg alles aan een variabele toe te wijzen. print som(a)
werkt prima.
Je zult specifieker moeten zijn over wat je precies schreef en hoe het niet werkt.
Somlijst van nummers:
sum(list_of_nums)
Berekening van de helft van n en n - 1 (als ik het patroon juist heb), met behulp van een list comprehension:
[(x + (x - 1)) / 2 for x in list_of_nums]
Som aangrenzende elementen, bijv. ((1 + 2) / 2) + ((2 + 3) / 2) + ... met behulp van reduce en lambdas
reduce(lambda x, y: (x + y) / 2, list_of_nums)