繁体   English   中英

检查项目是否在元组列表的范围内

[英]Check if item is in range of a list of tuples

我有一个文件,其中只需要修改特定的“块”行,在这种情况下,我想检索 a 和 b 之间的行,包括这些行:

1 
2 a
3 
4 b
5
6
7 a
8
9
10 b

现在我有一个元组列表,它指示我需要在哪些行索引之间修改内容:[(2, 4), (7, 10)]。

现在我需要替换那些行的内容,所以像

with open("file.txt") as file1:
    for index, line in enumerate(log, start=1):
        if index in range(**OF ONE OF THE TUPLES IN THE LIST**):
            line = ....

我不明白如何在没有嵌套循环和重复内容/多次打开文件的情况下实现这一点。

想法?

这是一个可能的解决方案:

ranges = [(2, 4), (7, 10)]
for line_index in range(number_of_lines):
    if any(line_index in range(start, end + 1) for start, end in ranges):
        # TODO
        # Replace line with something

假设您的范围已排序,您可以编写一个生成器,该生成器将为范围内的数字生成True ,为其他数字生成False

def ranges(rngs, start=0):
    for a, b in rngs:
        for _ in range(start, a):
            yield False
        for _ in range(a, b):
            yield True
        start = b
    while True:
        yield False

并将其与文件迭代器结合起来:

for change, line in zip(ranges(your_ranges), file1):
   if change:
       ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM