私は何かを数えて、それがNに出てきました。
ここで、0からN個の数字を含むリストを作成したいと思います。
例:
N = 5
次に、count_list = [1, 2, 3, 4, 5]
どうすればそれができますか?
また、リストを作成したら、そのリストから番号をランダムに選択し、その番号を使用します。
その後、リストの残りの番号(N-1)から別の番号を選択して、それも使用したいと思います。
これでリストは空になります。
これどうやってするの?
次のような方法で要素の列挙を作成できます。
_mylist = list(xrange(10))
_
次に、_random.choice
_関数を使用してアイテムを選択できます。
_import random
...
random.choice(mylist)
_
Asim Ihsanが正しく述べたように、私の答えはOPの完全な問題に対処しませんでした。リストから値を削除するには、単にlist.remove()
を呼び出すことができます:
_import random
...
value = random.choice(mylist)
mylist.remove(value)
_
タカタカが指摘したように、組み込み関数xrange
はrange
in Python 3。
このコードを試すことができます
import random
N = 5
count_list = range(1,N+1)
random.shuffle(count_list)
while count_list:
value = count_list.pop()
# do whatever you want with 'value'
最初の部分に関して:
>>> N = 5
>>> count_list = [i+1 for i in xrange(N)]
>>> count_list
[1, 2, 3, 4, 5]
>>>
2番目については、9.6。random —擬似乱数を生成を読み取ります。
>>> from random import choice
>>> a = choice(count_list)
>>> a
1
>>> count_list.remove(a)
>>> count_list
[2, 3, 4, 5]
それが一般的な考え方です。
ところで、繰り返しのないリスト内の要素のランダムな選択(Pythonレシピ)。
高速ランダム選択にはいくつかの実装があります。
ランダムな要素を選択する場合、ものを数える必要はありません。 random.choice()
を使用して、イテラブルを渡すだけです。
_import random
items = ['foo', 'bar', 'baz']
print random.choice(items)
_
本当にカウントする必要がある場合は、random.randint(1, count+1)
を使用してください。
次を使用できます。
import random
random.choice(range(n))
または:
random.choice(range(1,n+1))
1
からではなく0
からn
にしたい場合。
その後、リストの残りの番号(N-1)から別の番号を選択して、それも使用したいと思います。
それから、間違いなく1つを選ぶためだけに1からNまでの数字のリストを作成したくありません(選択するために明示的に作成するのではなく、その範囲の乱数を直接要求しないのはなぜですか?)代わりに、そのようなリストをシャッフルします。幸いなことに、random
モジュールでもこれをカバーしています:random.shuffle
を使用してください。
もちろん、膨大な数のリストがあり、数個だけを描画したい場合は、random.choice
を使用してそれぞれを描画して削除することは確かに意味があります。
しかし...いくつかのアイテムのカウントに対応する範囲から数値を選択したいのはなぜですか?番号を使用してアイテムの1つを選択しますか?それをしないでください。それは物事を複雑にしすぎるためにあなたの邪魔になります。アイテムのいずれかを選択する場合は、直接random.choice
を使用して直接選択します。
リストが空になるまで、set
を維持し、ランダムに選択した要素を(choice
で)削除します。
s = set(range(1, 6))
import random
while len(s) > 0:
s.remove(random.choice(list(s)))
print(s)
3回実行すると、3つの異なる答えが得られます。
>>>
set([1, 3, 4, 5])
set([3, 4, 5])
set([3, 4])
set([4])
set([])
>>>
set([1, 2, 3, 5])
set([2, 3, 5])
set([2, 3])
set([2])
set([])
>>>
set([1, 2, 3, 5])
set([1, 2, 3])
set([1, 2])
set([1])
set([])
リストを作成(編集):
count_list = range(1, N+1)
ランダム要素を選択:
import random
random.choice(count_list)