pythonlistrandomset

random.choice from set?


I'm working on an AI portion of a guessing game. I want the AI to select a random letter from this list. I'm doing it as a set so I can easily remove letters from the list as they are guessed in the game and are therefore no longer available to be guessed again.

it says set object isn't indexable. How can I work around this?

import random

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

Solution

  • Note (Oct. 2020): as of v3.9, Python has officially deprecated random.sample() working on sets, with the official guidance being to explicitly convert the set to a list or tuple before passing it in, though this doesn't solve the efficiency problems.


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

    Documentation: https://docs.python.org/3/library/random.html#random.sample

    Note that choosing random elements from a set is extremely inefficient no matter how you do it - it takes time proportional to the size of the set, or worse if the set's underlying hash table is sparse due to removed elements.

    Instead, you should probably use a different data structure that supports this operation efficiently.