我想在列表中标识连续数字组,以便:
myfunc([2, 3, 4, 5, 12, 13, 14, 15, 16, 17, 20])
Run Code Online (Sandbox Code Playgroud)
返回:
[(2,5), (12,17), 20]
Run Code Online (Sandbox Code Playgroud)
并且想知道最好的方法是什么(特别是如果在Python中有内置的东西).
编辑:注意我原本忘了提到个别数字应该作为单独的数字返回,而不是范围.
python中是否存在可以将增加的整数列表转换为范围列表的内容
例如,给定{0,1,2,3,4,7,8,9,11}我想得到{{0,4},{7,9},{11,11}}.
我可以写一个程序来做这个,但想知道python中是否有内置函数
我正在寻找最基本的方法,根据序列中缺少的数字将数字列表拆分成较小的列表.例如,如果初始列表是:
seq1 = [1, 2, 3, 4, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)
该函数将产生:
[[1, 2, 3, 4], [6, 7, 8, 9, 10]]
Run Code Online (Sandbox Code Playgroud)
要么
seq2 = [1, 2, 4, 5, 6, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)
会导致:
[[1, 2], [4, 5, 6], [8, 9, 10]]
Run Code Online (Sandbox Code Playgroud) Python有一个range方法,它允许以下内容:
>>> range(1, 6)
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是相反的:拿一个数字列表,并返回开始和结束.
>>> magic([1, 2, 3, 4, 5])
[1, 5] # note: 5, not 6; this differs from `range()`
Run Code Online (Sandbox Code Playgroud)
这对于上面的示例来说很容易做到,但是是否可以允许间隙或多个范围,以类似PCRE的字符串格式返回范围?像这样的东西:
>>> magic([1, 2, 4, 5])
['1-2', '4-5']
>>> magic([1, 2, 3, 4, 5])
['1-5']
Run Code Online (Sandbox Code Playgroud)
编辑:我正在寻找一个Python解决方案,但我也欢迎其他语言的工作示例.它更多的是要找出一个优雅,高效的算法.奖金问题:是否有任何编程语言具有内置方法?