4

これは、 Python ではなく R を除いて、これと重複する質問です。

リスト内の連続した (連続していると呼ぶ人もいます) 整数のグループを識別したいと思います。ここで、重複したエントリは同じ範囲内に存在するものとして扱われます。したがって:

myfunc(c(2, 3, 4, 4, 5, 12, 13, 14, 15, 16, 17, 17, 20))

戻り値:

min  max
2    5
12   17
20   20

どの出力形式でも問題ありませんが。私の現在の強引な for-loop メソッドはかなり遅いです。

(Pythonの回答を簡単に再解釈できたなら申し訳ありませんが、私は愚かです!)

4

1 に答える 1

7

使用するだけdiffです:

x = c(2, 3, 4, 4, 5, 12, 13, 14, 15, 16, 17, 17, 20)

start = c(1, which(diff(x) != 1 & diff(x) != 0) + 1)
end = c(start - 1, length(x))

x[start]
# 2 12 20
x[end]
# 5 17 20
于 2013-05-01T19:44:58.500 に答える