Skip to main content
 首页 » 编程设计

python之当列表项依赖于较早的项目时使用函数形式

2025年05月04日99daizhj

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

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。