Mijn vraag
Dit is een rookie vraag ongetwijfeld, maar ik zie het even niet. Bedoeling is dat je binnen een lijst over een sliding window van 3 een gemiddelde neemt van deze drie elementen en deze in een nieuwe lijst stopt. De lijst hoeft geen lengte te hebben die een meervoud van drie is. Mijn poging levert een - voor mij althans - vreemd resultaat op:
Mijn redenering was door de lijst te lopen, in stappen van 3 en dan het gemiddelde van die 3 elementen te nemen en in een lijst te plakken. Via de modulo zou ik dan de resterende elementen achteraan de lijst verzamelen en daar het gemiddelde van nemen, waarna ook wordt toegevoegd aan de lijst met gemiddelden.
Nu, als ik wandel door mijn lijst via een gewone for-loop, zie een resultaat dat ik verwacht (output staat bij voorbeeld). Steek ik diezelfde for-loop in mijn functie dan gooit die op het einde echter een lege lijst, waardoor ik mijn berekening die zou moeten volgen niet meer kan maken. Ik heb er even een print tussen gezet om het probleem te duiden (output staat er ook bij). Als ik de while loop unquote, krijg ik dan ook "avgs.append(sum(lijst[i]+lijst[i+1]+lijst[i+2])/3) builtins.TypeError: 'int' object is not iterable". Ik vermoed dat dit aan die lege lijst te wijten is...
Mocht iemand dit kunnen verduidelijken zou ik enorm dankbaar zijn. Geen huiswerk overigens. Probeer nog wat oefeningen te maken voor mijn examen...
...
Relevante software en hardware die ik gebruik
Python 3.10.5 op Macbook M1
...
Wat ik al gevonden of geprobeerd heb
Google en mijn frustratie laten toenemen...
...
Dit is een rookie vraag ongetwijfeld, maar ik zie het even niet. Bedoeling is dat je binnen een lijst over een sliding window van 3 een gemiddelde neemt van deze drie elementen en deze in een nieuwe lijst stopt. De lijst hoeft geen lengte te hebben die een meervoud van drie is. Mijn poging levert een - voor mij althans - vreemd resultaat op:
Mijn redenering was door de lijst te lopen, in stappen van 3 en dan het gemiddelde van die 3 elementen te nemen en in een lijst te plakken. Via de modulo zou ik dan de resterende elementen achteraan de lijst verzamelen en daar het gemiddelde van nemen, waarna ook wordt toegevoegd aan de lijst met gemiddelden.
Nu, als ik wandel door mijn lijst via een gewone for-loop, zie een resultaat dat ik verwacht (output staat bij voorbeeld). Steek ik diezelfde for-loop in mijn functie dan gooit die op het einde echter een lege lijst, waardoor ik mijn berekening die zou moeten volgen niet meer kan maken. Ik heb er even een print tussen gezet om het probleem te duiden (output staat er ook bij). Als ik de while loop unquote, krijg ik dan ook "avgs.append(sum(lijst[i]+lijst[i+1]+lijst[i+2])/3) builtins.TypeError: 'int' object is not iterable". Ik vermoed dat dit aan die lege lijst te wijten is...
Mocht iemand dit kunnen verduidelijken zou ik enorm dankbaar zijn. Geen huiswerk overigens. Probeer nog wat oefeningen te maken voor mijn examen...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| lijst = [4,2,3,4,5,6,8,4] for i in range(0,len(lijst),3): print(lijst[i]) #Levert wel degelijk 4 4 8 def avgSlide(lijst): avgs = [] rest = len(lijst)%3 #0 if True, 1 False idx = 0 for i in range(0,len(lijst),3): idx = i+2 som = 0 print(lijst[i]) while idx < len(lijst): #Deze lijn werd aangepast (stond sum voor initieel :s) avgs.append((lijst[i]+lijst[i+1]+lijst[i+2])/3) if rest !=0: for i in range(1,rest+1): som += lijst[-i] avgs.append(som/rest) return avgs print(avgSlide([4,2,3,4,5,6,8,4])) #Dit levert dus 4 4 8 [] |
...
Relevante software en hardware die ik gebruik
Python 3.10.5 op Macbook M1
...
Wat ik al gevonden of geprobeerd heb
Google en mijn frustratie laten toenemen...
...
[ Voor 3% gewijzigd door utopiaBe op 18-01-2023 17:16 ]