我有一个元组列表,每个元组都有元素的长度。我使用以下代码根据早期元素的长度来计算元素的偏移量。
import pprint
recordInfo = [(3,), (4,), (1,), (2,)] # List of lengths
# Calculate and add offsets
recordSize = 0
for index, info in enumerate(recordInfo):
recordInfo[index] = info + ( recordSize, ) # Replace with new tuple with offset
recordSize += info[0] # Calculate next offset
pprint.pprint(recordInfo)
输出是
[(3, 0), (4, 3), (1, 7), (2, 8)]
有没有办法以功能形式进行循环,例如列表理解?我无法弄清楚如何避免使用临时变量
recordSize
,这使它变得不可能吗? 最佳答案
它不是很漂亮,效率也不高,但是这里的列表理解可以满足您的要求:
>>> recordInfo = [(3,), (4,), (1,), (2,)]
>>> [info + (sum(_info[0] for _info in recordInfo[:i]),)
for i,info in enumerate(recordInfo)]
[(3, 0), (4, 3), (1, 7), (2, 8)]
它通过在每次迭代时重新计算直到当前项的偏移量来工作,因此效率低下。
它同时适用于Python 2和3。