(36) 配列データをシャッフル

投稿者: | 2014年7月10日

9,958 views

この記事は最終更新から 1822日 が経過しています。

1. 基本

random.shuffle を使用すると、配列要素をシャッフルできる。

>>> import random
>>>
>>> a = range(10)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
>>> random.shuffle(a)
>>> a
[6, 9, 1, 4, 5, 0, 2, 8, 7, 3]

文字列配列でもOK!

>>> b = ['aaa','BBB','ccc','dDd','eEE']
>>> b
['aaa', 'BBB', 'ccc', 'dDd', 'eEE']
>>>
>>> random.shuffle(b)
>>> b
['BBB', 'aaa', 'dDd', 'ccc', 'eEE']

numpy配列の場合は numpay.random.shuffle で同じことができる。

>>> import numpy as np
>>> import numpy.random as nr
>>>
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>>
>>> nr.shuffle(a)
>>> a
array([0, 6, 4, 3, 5, 8, 9, 2, 7, 1])

2. 応用

ファイル検索で得られたファイルリストをシャッフルする。
以下のようなテキストファイルが置かれたディレクトリに対してファイル検索する。

[user@linux]$ ll ./sub/
合計 28
-rw-rw-r--. 1 user user 35  7月 10 23:35 2014 text001.txt
-rw-rw-r--. 1 user user 35  7月 10 23:35 2014 text002.txt
-rw-rw-r--. 1 user user 35  7月 10 23:35 2014 text003.txt
-rw-rw-r--. 1 user user 35  7月 10 23:35 2014 text004.txt
-rw-rw-r--. 1 user user 35  7月 10 23:35 2014 text005.txt
-rw-rw-r--. 1 user user 35  7月 10 23:35 2014 text006.txt
-rw-rw-r--. 1 user user 35  7月 10 23:35 2014 text007.txt

glob を使ってファイルリストを取得し、これをシャッフルしてみる。

>>> import glob
>>> files = glob.glob('./sub/*.txt')
>>> files
['./sub/text002.txt', './sub/text005.txt', './sub/text006.txt',
 './sub/text003.txt', './sub/text001.txt', './sub/text004.txt',
 './sub/text007.txt']
>>>
>>> import random
>>> random.shuffle(files)
>>> files
['./sub/text005.txt', './sub/text002.txt', './sub/text004.txt',
 './sub/text003.txt', './sub/text001.txt', './sub/text006.txt',
 './sub/text007.txt']

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です