Fix Python – random.choice from set? python

Question

Asked By – jamyn

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) 

Now we will see solution for issue: random.choice from set? python


Answer

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.

This question is answered By – NPE

This answer is collected from stackoverflow and reviewed by FixPython community admins, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0