1. ホーム
  2. python

[解決済み] 項目の順序を維持したまま、リストからランダムにサンプルを取得する?

2023-05-21 11:29:23

質問

私はソートされたリストを持っています、例えば:(それは実際には単なる数字ではなく、複雑な時間のかかるアルゴリズムでソートされたオブジェクトのリストです。)

mylist = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,9  , 10 ]

Pythonの関数で、アイテムのN個を与えてくれて、かつ、順番を維持してくれるものはないでしょうか?

randomList = getRandom(mylist,4)
# randomList = [ 3 , 6 ,7 , 9 ]
randomList = getRandom(mylist,4)
# randomList = [ 1 , 2 , 4 , 8 ]

etc...

どのように解決するのですか?

次のコードは、サイズ4のランダムサンプルを生成します。

import random

sample_size = 4
sorted_sample = [
    mylist[i] for i in sorted(random.sample(range(len(mylist)), sample_size))
]

(注意: Python 2 では、より良い方法で xrange の代わりに range )

説明

random.sample(range(len(mylist)), sample_size)

はランダムなサンプルを生成します。 インデックス のランダムなサンプルを生成します。

これらのインデックスは、元のリストの要素の順序を保持するようにソートされます。

最後に、リスト内包はサンプリングされたインデックスを与えて、元のリストから実際の要素を取り出します。