python - 返回带字符的字符串 - 其中数字彼此跟随

标签 python

我决定编写一个函数来对数字列表进行排序并生成一个字符串,其中一个接一个的数字被符号 - 代替。

例如 -> [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/

相关文章:

python - Pandas 如何通过正则表达式从列提取到多行?

python - 如何在 Python 3 中使用 unicode 字符作为变量?

python - 有没有办法并行运行机器人框架测试套件?

python - 如何加载带有自定义损失的模型?

python - 有没有更有效的方法来编写合并函数?

python - 运行 GAE 开发服务器时,本地 MySQLdb 连接失败并出现 AttributeError for paramstyle

python - statsmodels add_constant 用于 OLS 拦截,这实际上在做什么?

java - 找到两个线性等式成立的整数集

python - 双击 python 文件与通过 cmd 运行的结果不同

python - 如何在 View 中捕获 django.http.request.DisallowedHost?