[英]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.