最后一次迭代后关闭范围的 Pythonic 方式

标签 python python-3.x iteration

我有一个代码风格问题,我正在寻找我在下面写的内容的 pythonic 实现。

我发布的(简化的)代码遍历一个序列并返回范围。每个范围以特定条件开始和结束。范围不能重叠。我正在使用变量 active 来跟踪是否已找到范围的开始。如果在序列的末尾,事件范围尚未关闭,则应添加它(以 input_length 作为结束索引)

下面的代码按预期工作,但我不喜欢这样的事实,即我必须编写代码将范围附加到结果列表两次。在我遇到的实际问题中,这个 block 要长得多,我不想在 for 循环之后再写一遍。

您对我如何改进它有什么建议吗?

谢谢!

input_length = 100
results = []

active = False
start = None
for i in range(input_length):
    condition = i % 9 == 0
    if not active and condition:
        active = True
        start = i

    condition2 = i % 13 == 0
    if active and condition2:
        active = False
        # do some additional calculations...
        results.append((start, i))

if active:
    # do some additional calculations...
    results.append((start, input_length))

print(active)
print(results)

最佳答案

简单的方法是编辑内部条件:

    condition2 = i % 13 == 0
    if active and (condition2 or i == input_length-1))
        active = False
        # do some additional calculations...
        results.append((start, i if condition2 else i + 1))

并移除外部。

如果您想避免 i if condition2 else i + 1,也许您可​​以迭代 range(input_length + 1)? (这取决于你在循环中做的其他事情)

关于最后一次迭代后关闭范围的 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38375925/

相关文章:

具有不同参数大小的 Python 函数指针

Python 将回车解码为换行

python - 根据另一个列表中的元素重复一个列表中的元素

jsp - 内循环迭代指定次数

xml - XSLT for 循环或节点复制的替代方案

python - Spark Structured Streaming - 新批处理上的空字典

python - 在 Linux 上从虚拟环境安装 distribute_setup.py 时出错

python - 导入错误 : cannot import name 'PY2'

python - 根据每个列表的第一个元素从列表列表中删除一个项目

python - 在列表上迭代格式字符串