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

标签 python python-3.x list-comprehension

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

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/

相关文章:

python - 在 csv.writer 中添加空格作为分隔符

dictionary - 如何在Python 3中实现UserDict.DictMixin的功能?

Python - 用于列表理解的动态过滤器?

python - 从文件到行列表

python - 将 for 循环写入列表理解

python - 将 Python 系统调用作为字符串结果获取

python - python中 '\xe2\x80\x93'和 '-'有什么区别?我如何将其全部更改为后者?

python - 有效测试二维 numpy 数组中是否存在字符串

python - 在 Windows 上安装 Airflow

python - 将像素 block 设置为颜色opencv