簡體   English   中英

Python 依次求和項目

[英]Python sum items in sequence

從坐標的起始列表(xCoord 變量)我想對這些值(Offset_X 變量)應用偏移量。 Offset_X 是一個包含長度等於 xCoord 的子列表的列表。

重要的是要強調 xCoord 變量 (xCoord[0]) 的第一項將求和 Offset_X 列表中第一個子列表的第一項,然后,該結果將求和第一個子列表中的第二項。

請找到包含輸入的屏幕截圖和我落后的最終結果(new_xCoord 變量):

xCoord = [2,5]
Offset_X = [[3,4,6],[1,5,3,4]]
new_xCoord = [[5,9,15],[6,11,14,18]]  # <- result

謝謝,

可能有更有效的方法來做到這一點,但這有效......

xCoord = [2,5]
Offset_X = [[3,4,6],[1,5,3,4]]

def calc(xCoord, Offset_X):
    new_xCoord = []      # create new coords list
    for cor, offs in zip(xCoord, Offset_X):  # iterate the coords and offset
        inter = cor 
        arr = []          # create empty list
        for off in offs:  # iterate the current coordinates offset list
            inter += off           # increase value by the offset
            arr.append(inter)      # append it to the list
        new_xCoords.append(arr)    # append the list to new coords list
    return new_xCoords             # return the new coords list

print(calc(xCoord, Offset_X))

OUTPUT

[[5, 9, 15], [6, 11, 14, 18]]

更新

以下示例可能表現更好,因為使用itertools模塊通常會提供更有效的解決方案。

import itertools

xCoord = [2,5]
Offset_X = [[3,4,6],[1,5,3,4]]

def calc(xCoord, Offset_X):
    new_xCoord = []
    for cor, offs in zip(xCoord, Offset_X):
        offs[0] += cor
        new_xCoord.append(list(itertools.accumulate(offs)))
    return new_xCoords

print(calc(xCoord, Offset_X))

引入幫助器 function 使其可以作為列表理解來解決,因此您不必 append 來列表。 Accumulate 保留 arrays 中每個元素的運行總計,並一次生成一個總計。

def accumulate(x, offsets):
    new_x = x
    for offset in offsets:
        new_x += offset
        yield(new_x)
    
new_xCoord = [list(accumulate(x, offsets))for x, offsets in zip(xCoord, Offset_X)]

您可以為此使用內置模塊itertools ,它有 function 累積,這可能很方便。

from itertools import accumulate
print([list(accumulate(o, initial=x))[1:] for x, o in zip(xCoord, Offset_X)])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM