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']