在列表及其开始索引和结束索引中查找序列号序列

2024-09-26 22:51:52 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个带有一些值的列表,例如:

timeSum = [0,0,0,1,1,2,3,3,3,2,3]

我需要得到包含最大值的区间的边界。你知道吗

所以我创建了一个索引为max value的列表:

maxTime = [i for i, j in enumerate(timeSum) if j == max(timeSum)]

这给了我:[6,7,8,10]。你知道吗

现在我明白了,我需要找到序列号边界的序列来获得输出,比如:6:810 但我不太清楚怎么做。你知道吗


Tags: in列表forifvalue序列max边界
2条回答

我想我解决了这个问题。请看下面的代码。你知道吗

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

timeSum = [0,0,0,1,1,2,3,3,3,2,3]

maxTime = [i for i, j in enumerate(timeSum) if j == max(timeSum)]

is_range = []
not_range = []

for i in range(len(maxTime)):
    try:
        if maxTime[i + 1] - maxTime[i] == 1:
            is_range.append(f"{maxTime[i]}:{maxTime[i + 1]}")
    except:
        if str(maxTime[i]) not in "".join(is_range):
            not_range.append(maxTime[i])


def f(arg):
    for i in range(len(arg)):
        try:
            split1 = arg[i].split(":")
            split2 = arg[i + 1].split(":")
            if split1[-1] == split2[0]:
                arg[i] = arg[i].replace(split1[-1], split2[-1])
                arg.pop(i + 1)
        except:
            pass
    for i in range(len(arg)):
        try:
            split1 = arg[i].split(":")
            split2 = arg[i + 1].split(":")
            if split1[-1] == split2[0]:
                return f(arg)
            else:
                return arg
        except:
            return arg


new_list = f(is_range)
new_list.extend(not_range)

print(new_list)

输出1:

['6:8', 10]

如果列表如下所示

timeSum = [0,0,0,1,1,2,3,3,3,2,3,3,3]

输出2:

['6:8', '10:12']

如果列表如下所示

timeSum = [0,0,0,1,1,2,3,3,3,3,2,3,3,3,3]

输出如下:

输出3:

['6:9', '11:14']

你可以这样做。这基本上会创建序列的子列表,当序列被破坏时,它会将其添加到结果中。你知道吗

end_res = []
cur_seq = [maxTime[0]]
for num in maxTime[1:]:
    if num == cur_seq[-1] + 1:
        cur_seq.append(num)
    else:
        end_res.append(cur_seq)
        cur_seq = [num]
end_res.append(cur_seq)

根据您希望如何准确地使用结果,这只是像您的示例一样打印它:

print(end_res)
for res in end_res:
    if len(res) > 1:
        print(res[0], ':', res[-1], sep='')
    else:
        print(res[0])

maxTime列表中,您给出了[6, 7, 8, 10],它给出了:

[[6, 7, 8], [10]]
6:8
10

相关问题 更多 >

    热门问题