【Python基礎】リストの要素を飛び飛び(X個おき)に取得する方法

  • URLをコピーしました!

リスト

前回、Pythonでゼロ交差点(Zero Crossing)の検出方法を紹介しました。

今回はリストの要素を飛び飛びに取得する方法を紹介します。

それでは始めていきましょう。

リストの要素をX個おきに取得

まずは今回使用するリストを作っていきましょう。

ということでrange関数を使って0から99までのリストを作成してみました。

val_list = range(100)

print(*val_list)

実行結果
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 
93 94 95 96 97 98 99

「*リスト」でリストをアンパックしています。

詳しくはこちらの記事をどうぞ。

このリストの要素をX個おきに取得する場合、「リスト[::X]」とします。

5個おきに取得するのなら、「リスト[::5]」です。

val_list = range(100)

val_list_1 = val_list[::5]

print(*val_list_1)

実行結果
0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95

ちなみに最初の2つのコロンは範囲を示しています。

そのため特定の範囲(A、B)でX個おきに要素を取得する場合は「リスト[A:B:X]」となります。

val_list = range(100)

val_list_2 = val_list[20:70:5]

print(*val_list_2)

実行結果
20 25 30 35 40 45 50 55 60 65

範囲の開始と終了はどちらかだけ指定するのでも大丈夫です。

val_list = range(100)

val_list_3 = val_list[20::5]

print(*val_list_3)

実行結果
20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95
val_list = range(100)

val_list_4 = val_list[:70:5]

print(*val_list_4)

実行結果
0 5 10 15 20 25 30 35 40 45 50 55 60 65

2次元のリストで要素をX個おきに取得

次に2次元のリストの場合を見てみましょう。

まず2次元のリストにするにはNumPyの「resize([行, 列])」を使います。

import numpy as np

val_list = np.array(range(100))

val_list.resize([10, 10])

print(val_list)

実行結果
[[ 0  1  2  3  4  5  6  7  8  9]
 [10 11 12 13 14 15 16 17 18 19]
 [20 21 22 23 24 25 26 27 28 29]
 [30 31 32 33 34 35 36 37 38 39]
 [40 41 42 43 44 45 46 47 48 49]
 [50 51 52 53 54 55 56 57 58 59]
 [60 61 62 63 64 65 66 67 68 69]
 [70 71 72 73 74 75 76 77 78 79]
 [80 81 82 83 84 85 86 87 88 89]
 [90 91 92 93 94 95 96 97 98 99]]

これをfor文で繰り返しつつ、「リスト[::X]」で要素を取得していきます。

import numpy as np

val_list = np.array(range(100))

val_list.resize([10, 10])

val_list_new = []
for row in val_list[::2]:
    val_list_new.append(row[::2])

print(val_list_new)

実行結果
[array([0, 2, 4, 6, 8]), 
 array([20, 22, 24, 26, 28]), 
 array([40, 42, 44, 46, 48]),
 array([60, 62, 64, 66, 68]),
 array([80, 82, 84, 86, 88])]

リスト内包表記で書くとこんな感じになります。

import numpy as np

val_list = np.array(range(100))

val_list.resize([10, 10])

val_list_new = [row[::2] for row in val_list[::2]]

print(val_list_new)

実行結果
[array([0, 2, 4, 6, 8]),
 array([20, 22, 24, 26, 28]),
 array([40, 42, 44, 46, 48]),
 array([60, 62, 64, 66, 68]),
 array([80, 82, 84, 86, 88])]

ということでリスト内の要素を飛び飛び(X個おき)で取得する方法でした。

次回はPythonでデータの補完(interpolation)をする方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする