用法:
itertools.accumulate(iterable[, func, *, initial=None])
創建一個迭代器,返回累積和或其他二進製函數的累積結果(通過可選的
func
參數指定)。如果提供了
func
,它應該是兩個參數的函數。輸入iterable
的元素可以是任何可以被接受為func
的參數的類型。 (例如,使用默認的加法運算,元素可以是任何可加類型,包括Decimal
或Fraction
。)通常,輸出的元素數量與輸入的可迭代匹配。但是,如果提供了關鍵字參數
initial
,則累加會導致initial
值,因此輸出比輸入可迭代的元素多一個。大致相當於:
def accumulate(iterable, func=operator.add, *, initial=None): 'Return running totals' # accumulate([1,2,3,4,5]) --> 1 3 6 10 15 # accumulate([1,2,3,4,5], initial=100) --> 100 101 103 106 110 115 # accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120 it = iter(iterable) total = initial if initial is None: try: total = next(it) except StopIteration: return yield total for element in it: total = func(total, element) yield total
func
參數有多種用途。它可以設置為min()
用於運行最小值,max()
用於運行最大值,或operator.mul()
用於運行產品。可以通過累積利息和應用付款來建立攤銷表。 First-order recurrence relations 可以通過在迭代中提供初始值並僅使用func
參數中的累積總數來建模:>>> data = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8] >>> list(accumulate(data, operator.mul)) # running product [3, 12, 72, 144, 144, 1296, 0, 0, 0, 0] >>> list(accumulate(data, max)) # running maximum [3, 4, 6, 6, 6, 9, 9, 9, 9, 9] # Amortize a 5% loan of 1000 with 4 annual payments of 90 >>> cashflows = [1000, -90, -90, -90, -90] >>> list(accumulate(cashflows, lambda bal, pmt: bal*1.05 + pmt)) [1000, 960.0, 918.0, 873.9000000000001, 827.5950000000001] # Chaotic recurrence relation https://en.wikipedia.org/wiki/Logistic_map >>> logistic_map = lambda x, _: r * x * (1 - x) >>> r = 3.8 >>> x0 = 0.4 >>> inputs = repeat(x0, 36) # only the initial value is used >>> [format(x, '.2f') for x in accumulate(inputs, logistic_map)] ['0.40', '0.91', '0.30', '0.81', '0.60', '0.92', '0.29', '0.79', '0.63', '0.88', '0.39', '0.90', '0.33', '0.84', '0.52', '0.95', '0.18', '0.57', '0.93', '0.25', '0.71', '0.79', '0.63', '0.88', '0.39', '0.91', '0.32', '0.83', '0.54', '0.95', '0.20', '0.60', '0.91', '0.30', '0.80', '0.60']
有關僅返回最終累加值的類似函數,請參見
functools.reduce()
。3.2 版中的新函數。
在 3.3 版中更改:添加了可選的
func
範圍。在 3.8 版中更改:添加了可選的
initial
範圍。
相關用法
- Python itertools.takewhile用法及代碼示例
- Python itertools.compress用法及代碼示例
- Python itertools.dropwhile用法及代碼示例
- Python itertools.repeat用法及代碼示例
- Python itertools.combinations_with_replacement用法及代碼示例
- Python itertools.groupby()用法及代碼示例
- Python itertools.repeat()用法及代碼示例
- Python itertools.count用法及代碼示例
- Python itertools.starmap用法及代碼示例
- Python itertools.filterfalse用法及代碼示例
- Python itertools.chain.from_iterable用法及代碼示例
- Python itertools.groupby用法及代碼示例
- Python itertools.zip_longest用法及代碼示例
- Python itertools.tee用法及代碼示例
- Python itertools.combinations用法及代碼示例
- Python itertools.permutations用法及代碼示例
- Python itertools.product用法及代碼示例
- Python itertools.chain用法及代碼示例
- Python itertools.cycle用法及代碼示例
- Python itertools.islice用法及代碼示例
注:本文由純淨天空篩選整理自python.org大神的英文原創作品 itertools.accumulate。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。