比较列表中的相邻变量并重新格式化输入

inp = [1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 14, 17, 20, 25,27,28,29,31]

预期的输出:如果相邻变量串联,则用连字符填充。如果没有,请附加给定的数字。

Expected Output = [1-3,5,7-12,14,17,20,25,27-29,31]

我已使用以下代码获取了一个相邻的号码。但是要求不满足。

inp = [1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 14, 17, 20, 25,27,28,29,31]
for x,y in zip(inp[::],inp[1::]):
    print(x,y)

请帮助。

评论
钻石泪
钻石泪

You can use itertools.groupby:

from itertools import groupby

lst = [1, 2, 3, 5, 7, 8, 9, 10, 11, 12, 14, 17, 20, 25,27,28,29,31]

out = []
for _, g in groupby(enumerate(lst, lst[0]-1), lambda k: k[1]-k[0]):
    g = [*g]
    if len(g) == 1:
        out.append(str(g[0][1]))
    else:
        out.append('{}-{}'.format(g[0][1], g[-1][1]))

print(out)

印刷品:

['1-3', '5', '7-12', '14', '17', '20', '25', '27-29', '31']
点赞
评论