我有一个元组列表,每个元组都有元素的长度。我使用以下代码根据早期元素的长度来计算元素的偏移量。

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。

10-06 10:34