我决定编写一个函数来对数字列表进行排序并生成一个字符串,其中一个接一个的数字被符号 -
代替。
例如 -> [6,7,8,99,100,2,3,4,1]
函数需要返回 -> '1,2-4,6-8,99-100'
或
例如 -> [12,7,8,9,9,9,7,8,1,2,3,5,100]
函数需要返回 -> '1-3,5,7-9,12,100'
或
range(100) # return '0-100'
我从这个开始
def func(list):
sort_list = sorted(list)
print(sort_list) # [1, 2, 3, 4, 6, 7, 8, 99, 100]
func([6,7,8,99,100,2,3,4,1])
如何返回带有 -
的字符串,其中元素一个接一个地出现。
我想在这里我需要以某种方式应用方法 '-'.join
。或许?
提前谢谢你
最佳答案
首先,您必须根据元素是否恰好比最后一个元素大 1
来对元素进行分组。您可以在一个简单的循环中执行此操作,跟踪单独变量中的最后一个元素,或使用 [-1]
访问如此标识的最后一个组的最后一个元素。
lst = [6,7,8,99,100,2,3,4,1]
grps = [[lst[0]]] # start with group with first element
for x in lst[1:]:
if x == grps[-1][-1] + 1:
grps[-1].append(x) # add to last group
else:
grps.append([x]) # start new group
# [[6, 7, 8], [99, 100], [2, 3, 4], [1]]
然后,您可以对这些组进行排序(默认排序将按组中的第一个元素对它们进行排序,这就足够了)并从中创建字符串表示形式:
res = [str(g[0]) if len(g) == 1 else f"{g[0]}-{g[-1]}" for g in sorted(grps)]
# ['1', '2-4', '6-8', '99-100']
关于python - 返回带字符的字符串 - 其中数字彼此跟随,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58203516/