Ich habe eine Liste von Zahlen auf den zehnten gerundet:

myList =
[2.3,
 14.4,
 21.6,
 6.0,
 2.6,
 4.2,
 7.6,
 46.7,
 8.1,
 1.2,
 7.6,
 6.2,
 8.3,
 17.7,
 27.3,
 5.4,
 18.6,
 6.4,
 6.4,
 40.4,
 28.4,
 36.0,
 21.5,
 4.7,
 19.6,
 22.0,
 18.2,
 19.9,
 12.1,
 20.7,
 1.0,
 11.8,
 1.1,
 3.2,
 8.0,
 6.5,
 4.3,
 6.4,
 4.3,
 16.7,
 17.8,
 2.7,
 7.5,
 1.5,
 2.5,
 7.8,
 4.4,
 10.2,
 14.8,
 25.1]

Wenn ich diese Liste in die Funktion itertools.accumulate einführe und eine neue Liste (d. H. Eine laufende Summe) generiere, haben einige der Werte aufgrund der Gleitkomma-Arithmetik mehrere Dezimalstellen.

from itertools import accumulate

accumulated_list = list(accumulate(myList))
accumulated_list

Ausgänge zu:

[2.3,
 16.7,
 38.3,
 44.3,
 46.9,
 51.1,
 58.7,
 105.4,
 113.5,
 114.7,
 122.3,
 128.5,
 136.8,
 154.5,
 181.8,
 187.20000000000002,
 205.8,
 212.20000000000002,
 218.60000000000002,
 259.0,
 287.4,
 323.4,
 344.9,
 349.59999999999997,
 369.2,
 391.2,
 409.4,
 429.29999999999995,
 441.4,
 462.09999999999997,
 463.09999999999997,
 474.9,
 476.0,
 479.2,
 487.2,
 493.7,
 498.0,
 504.4,
 508.7,
 525.4,
 543.1999999999999,
 545.9,
 553.4,
 554.9,
 557.4,
 565.1999999999999,
 569.5999999999999,
 579.8,
 594.5999999999999,
 619.6999999999999]

Ich habe auf einige Hauptbeiträge und Tutorials verwiesen, kann aber keine Lösung für mein accumulated_list finden:
Begrenzung von Floats auf zwei Dezimalstellen
https://docs.python.org/3/tutorial/floatingpoint.html

Wie können die -Werte wieder auf eine auf den Zehnten gerundete Zahl aufgelöst werden? (Den Druck nicht formatieren, sondern den Wert runden.)

Ich habe versucht,
zu verwenden list(numpy.round(accumulate(myList),1)) oder setzen Sie die Zahl mit dem Modul decimal auf eine Dezimalzahl, jedoch ohne Erfolg.
list(accumulate(myList.quantize(Decimal('0.1'))))

Hinzufügen weiterer Informationen zum Implementieren von Elementen als Dezimalzahl. myList von oben wird aus einer Funktion generiert. Wie können die Elemente als decimal implementiert werden?

import numpy as np

def simulate(mean, size):
    return list(np.round(np.random.exponential(mean, size), 1))

myList = simulate(15, 50)
0
md2614 22 Feb. 2020 im 07:45

3 Antworten

Beste Antwort

Sie können sie einfach auf eine einzelne Dezimalstelle round setzen:

accumulated_list = list(map(lambda x: round(x, 1), accumulate(myList)))
0
Austin 22 Feb. 2020 im 04:49

Sie können die Ergebnisse mit der Funktion round runden. Verwenden Sie map und eine lambda Funktion, um dies für jedes Element zu tun, das von accumulate erhalten wird.

accumulated = map(lambda x: round(x, 1), accumulate(myList))
print(list(accumulated))

# outputs the following list
[2.3, 16.7, 38.3, 44.3, 46.9, 51.1, 58.7, 105.4, 113.5, 114.7, 122.3, 128.5, 136.8, 154.5, 181.8, 187.2, 205.8, 212.2, 218.6, 259.0, 287.4, 323.4, 344.9, 349.6, 369.2, 391.2, 409.4, 429.3, 441.4, 462.1, 463.1, 474.9, 476.0, 479.2, 487.2, 493.7, 498.0, 504.4, 508.7, 525.4, 543.2, 545.9, 553.4, 554.9, 557.4, 565.2, 569.6, 579.8, 594.6, 619.7]
0
JJC 22 Feb. 2020 im 05:03

Du kannst es so machen:

import numpy as np
accumulated_list = np.around(np.cumsum(myList), decimals=1)

Vielen Dank

1
Top Developer 22 Feb. 2020 im 19:14