2

かなり標準的な問題のように思われるので、ループなしでこれを行う方法を見つけられなかったことに驚いています。
Pythonで作業しているので colors = ["red","green","blue"]、これらの要素をランダムな順序で長さNのリストに入れたいと思います。現在、私は以下を使用しています:

import random
colors = ["red","green","blue"]
otherList = []

for i in range (10):  # N=10 
    otherList.append(random.choice(colors))

これは次を返します:otherList = ["red","green","green","green","blue","green","red","green","green","blue"]、これはまさに私が欲しいものです。私はこれを行うためのより慣用的な方法を探していますか?何か案は?random.sampleが答えだったように見えましたが、ドキュメントに自分のニーズにぴったり合うものは何も見つかりませんでした。

4

2 に答える 2

6

リスト内包表記を使用できます。

[random.choice(colors) for i in range(10)] #xrange for python2 compatability

またはrandom.sample()いくつかの体操を通して:

nrandom = 10
random.sample( colors*(nrandom//len(colors)+1), nrandom )  

リスト内包表記よりも優れているとは思いませんが...

于 2012-08-17T15:16:37.883 に答える
2
>>> import random
>>> colors = ["red","green","blue"]
>>> [random.choice(colors) for i in range(10)]
['green', 'green', 'blue', 'red', 'red', 'red', 'green', 'red', 'green', 'blue']
于 2012-08-17T15:18:08.487 に答える