連続した数値の配列(リスト)を作成するには (range / seq / to / until)

連続した数値の配列(リスト)を作成する方法。

Scala PHP Python Ruby sh

Scala

tountil というメソッドでできる。

// 0から9までのリスト
0 until 10

// 1から10までのリスト
1 to 10

scala.collection.immutable.IndexedSeq のオブジェクトを生成できる。

Signature:

返り値にある型はすべて IndexedSeq[Int] を実装している。

tountilscala.runtime.RichInt のメソッドだが、scala.Int から scala.runtime.RichInt への暗黙の変換が scala.Predef で定義されているので、普通の整数から scala.runtime.RichInt のメソッドを呼び出すことができる。

整数のリストしか作れないので、例えば 0.0, 0.1, 0.2,,, のようなのを作りたい場合は以下のようにする。

// 0.0, 0.1, 0.2, ,,, 9.9
(0 until 100).map(_ / 10.0)

3 until 2 のように逆に書くと大きさ0の IndexedSeq[Int] になる。

tountil は普通のメソッドであるので 0 .until(100) と書いてもいいのだが、 1 to 10 のように中置記法で書かれることが多い。

PHP

range関数を使う。

var_export(range(0, 10));
// 出力結果
// array (
//   0 => 0,
//   1 => 1,
//   2 => 2,
//   3 => 3,
//   4 => 4,
//   5 => 5,
//   6 => 6,
//   7 => 7,
//   8 => 8,
//   9 => 9,
//   10 => 10,
// )

range 関数 | PHP Manual
http://php.net/manual/ja/function.range.php

Python

# 0から9までのリスト
range(10)

# 1から10までのリスト
range(1, 11)

# 6から10までの偶数だけのリスト
range(6, 12, 2)

# 0から-10までの負の偶数だけのリスト
range(0, -11, -2)

NumPyのarangeであれば、浮動小数点数の配列も作れる。

import numpy as np
np.arange(0, 1, 0.1)
# => array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])

linspace というのもある。

import numpy as np
np.linspace(0, 1, 11)
# => array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1. ])

numpy.arange | NumPy Manual
http://docs.scipy.org/doc/numpy/reference/generated/numpy.arange.html

Ruby

# 0から9までの配列(範囲オブジェクト)
0..9

# 0から99までの配列(範囲オブジェクト)
0..10*10-1

上記は範囲オブジェクトで配列ではないので、配列にしたい場合は以下のようにする。

(0..9).to_a

# または
[*0..9]

.. の表記を使った範囲オブジェクトにメソッドを適用するにはカッコで囲む必要がある。

(1..100).each {|i| puts i}

sh (シェルスクリプト)

seq というコマンドで連番を改行区切りで作ることができる。

seq 5
# 出力結果
# 1
# 2
# 3
# 4
# 5

2つのパラメータを与えれば先頭の数字と最後の数字になる。

seq 3 5
# 出力結果
# 3
# 4
# 5

3つのパラメータを与えれば先頭の数字、間隔、最後の数字になる。

seq 3 2 7
# 出力結果
# 3
# 5
# 7

seq 3 2 10
# 出力結果
# 3
# 5
# 7
# 9

for文に与えれば番号でループすることができる。

for i in $(seq 5); do
    echo $i
done
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。
スポンサーリンク