我有元组列表,每个元组都有元素的长度。我使用以下代码根据早期元素的长度计算元素的偏移量。
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。
关于python - 当列表项依赖于较早的项目时使用函数形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29531228/