Ответ 1
>>> random.sample(set('abcdefghijklmnopqrstuvwxyz'), 1)
['f']
Документация: https://docs.python.org/3/library/random.html#random.sample
Я работаю над частью искусственного интеллекта в игре на угадывание. Я хочу, чтобы ИИ выбрал случайную букву из этого списка. Я делаю это как набор, так что я могу легко удалить буквы из списка, так как они угаданы в игре и, следовательно, больше не доступны, чтобы угадать снова.
он говорит, что set
объект не индексируется. Как я могу обойти это?
import random
aiTurn=True
while aiTurn == True:
allLetters = set(list('abcdefghijklmnopqrstuvwxyz'))
aiGuess=random.choice(allLetters)
print (aiGuess)
>>> random.sample(set('abcdefghijklmnopqrstuvwxyz'), 1)
['f']
Документация: https://docs.python.org/3/library/random.html#random.sample
Вы должны использовать random.choice(tuple(myset))
, потому что он выглядит быстрее и, возможно, чище, чем random.sample
. Я написал следующее, чтобы проверить:
import random
import timeit
bigset = set(random.uniform(0,10000) for x in range(10000))
def choose():
random.choice(tuple(bigset))
def sample():
random.sample(bigset,1)[0]
print("random.choice:", timeit.timeit(choose, setup="global bigset", number=10000)) # 1.1082136780023575
print("random.sample:", timeit.timeit(sample, setup="global bigset", number=10000)) # 1.1889629259821959
Из чисел кажется, что random.sample
занимает на 7% больше времени.