1. ホーム
  2. python

[解決済み] 集合からランダムな選択? python

2022-05-14 15:32:51

質問

推理ゲームのAI部分を作っています。AI にこのリストからランダムに文字を選択させたいと考えています。私はそれをセットとして行っているので、ゲーム内で推測された文字をリストから簡単に削除することができ、したがって、再び推測することができなくなります。

次のように記述します。 set オブジェクトがインデックス化されていません。どのように私はこれを回避することができますか?

import random 
aiTurn=True

while aiTurn == True:
    allLetters = set(list('abcdefghijklmnopqrstuvwxyz'))
    aiGuess=random.choice(allLetters)



    print (aiGuess) 

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

注(2020年10月)。 v3.9 の時点で、Python は 公式に非推奨となりました。 random.sample() は、セットを渡す前に明示的にリストまたはタプルに変換することを公式指針として、セット上で動作します。


>>> random.sample(set('abcdefghijklmnopqrstuvwxyz'), 1)
['f']

ドキュメンテーション https://docs.python.org/3/library/random.html#random.sample

なお、集合からランダムに要素を選択することは 極めて非効率的です。 それはセットのサイズに比例して時間がかかり、セットの基礎となるハッシュ テーブルが削除された要素のためにまばらである場合は、さらに悪くなります。

代わりに、おそらく 別のデータ構造 を使うべきでしょう。