Ich arbeite an einem KI-Teil eines Ratespiels. Ich möchte, dass die KI einen zufälligen Buchstaben aus dieser Liste auswählt. Ich mache es als Set, damit ich Buchstaben leicht aus der Liste entfernen kann, da sie im Spiel erraten werden und daher nicht mehr verfügbar sind, um erneut erraten zu werden.
Es heißt, dass das set
Objekt nicht indizierbar ist. Wie kann ich das umgehen?
import random
aiTurn=True
while aiTurn == True:
allLetters = set(list('abcdefghijklmnopqrstuvwxyz'))
aiGuess=random.choice(allLetters)
print (aiGuess)
Antworten:
Dokumentation: https://docs.python.org/3/library/random.html#random.sample
quelle
[0]
am Ende, so ist es im Grunde identisch mitrandom.choice
(was seine Werte nicht in Form einer Listerandom.sample
tuttuple(population)
intern,random.choice(tuple(allLetters))
kann also besser sein.random.choice
. Wenn sich das Set auch während des Samplings ändert, sollten Sie wahrscheinlich überhaupt kein Set verwenden. Wenn Sie die belegten Hashes im Set und die Bucket-Größen kennen würden, wäre es einfach, eine Stichprobenfunktion zu schreiben ...Sie sollten verwenden
random.choice(tuple(myset))
, weil es schneller und wohl sauberer aussieht alsrandom.sample
. Ich habe folgendes geschrieben, um zu testen:Aus den Zahlen geht hervor, dass dies
random.sample
7% länger dauert.quelle
random.sample
es langsamer alsrandom.choice
schneller, wenn die eingestellte Größe zunimmt (der Überkreuzungspunkt liegt irgendwo zwischen der eingestellten Größe 100k-500k). Das heißt, je größer das Set, desto wahrscheinlicher ist esrandom.sample
, dass es schneller ist.