我想在列表中标识连续数字组,以便:
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中有内置的东西).
编辑:注意我原本忘了提到个别数字应该作为单独的数字返回,而不是范围.
有没有办法在R中编码增加的整数序列,类似于使用行程编码(rle)编码运行长度?
我将举例说明:
类比:行程编码
r <- c(rep(1, 4), 2, 3, 4, rep(5, 5))
rle(r)
Run Length Encoding
lengths: int [1:5] 4 1 1 1 5
values : num [1:5] 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)
期望:序列长度编码
s <- c(1:4, rep(5, 4), 6:9)
s
[1] 1 2 3 4 5 5 5 5 6 7 8 9
somefunction(s)
Sequence lengths
lengths: int [1:4] 5 1 1 5
value1 : num [1:4] 1 5 5 5
Run Code Online (Sandbox Code Playgroud)
编辑1
因此,somefunction(1:10)将给出结果: …
类似于在列表中查找连续数字组和在 R 中查找向量中的连续值,不同之处在于我有一个可能高达 4 的数字序列,即
y=c(4*1:4,24,31,33,39,4*16:20)
> y
[1] 4 8 12 16 24 31 33 39 64 68 72 76 80
Run Code Online (Sandbox Code Playgroud)
我想要一个函数来返回每个由最多 4 个分隔的值序列,所以我得到:
4 8 12 16 # all sep by at most 4
31 33 # all sep by at most 4
64 68 72 76 80 # all sep by at most 4
Run Code Online (Sandbox Code Playgroud)
我试过:
st=c(1,which(diff(y)<5)+1)
en=c(st-1,length(y))
y[st]
[1] 4 8 12 16 33 68 72 76 80
y[en]
[1] 4 …Run Code Online (Sandbox Code Playgroud)