10

次のようなリストにデータがあります。

L = [(3,4,5),(1,4,5),(1,2,3),(1,2,3)]

サイズ2をランダムにサンプリングする必要があるため、次を使用したかった:

import random
t1 = random.sample(set(L),2)

T1 はランダムに抽出された値のリストですが、最初のリストからランダムに抽出された値を初期リストから削除したかったのです。線形のforループを実行できますが、タスクのために、より大きなリストに対してこれを実行しようとしています。そのため、実行時間は永遠にかかります!

これをどうするかについての提案はありますか?

4

2 に答える 2

14
t1 = [L.pop(random.randrange(len(L))) for _ in xrange(2)]

の残りの要素の順序は変更されませんL

于 2013-05-10T07:24:40.817 に答える
12

1 つのオプションは、リストをシャッフルしてから、最初の 2 つの要素をポップすることです。

import random
L = [(3,4,5),(1,4,5),(1,2,3),(1,2,3)]
random.shuffle(L)
t1 = L[0:2]
于 2013-05-10T07:26:38.973 に答える