Suppose there are 3 lists:
l_1 = ['a', 'b', 'c']
l_2 = ['d', 'e', 'f']
l_index = ['l_1', 'l_2']
So l_index
contains names of 2 other lists. I want first to select a list by randomness, for which I can use:
import random
selected_list = random.choice(l_index)
Then I need to select an element in that list, also by randomness. However this doesn't work:
selected_element = random.choice(selected_list)
It's because selected_list
is treated as a string. How can I make python refer to it as a list instead?
CodePudding user response:
You could contain the two lists themselves in another list, and then make a random selection from 0 to the number of lists minus one.
import random
l_1 = ['a', 'b', 'c']
l_2 = ['d', 'e', 'f']
lists = [l_1, l_2]
idx = random.randint(0, len(lists) - 1)
random_list = lists[idx]
selected_element = random.choice(random_list)
print(selected_element) # prints from both lists over time
CodePudding user response:
You should have a list of the variables as suggested in the other answer, but if you have to use strings to get the lists use locals()
to get a dict
with the variables names as keys
selected_list = random.choice(l_index)
random.choice(locals()[selected_list])
CodePudding user response:
You could do it like this:
from random import choice
l_1 = ['a', 'b', 'c']
l_2 = ['d', 'e', 'f']
l_index = [l_1, l_2] # note use of variable names - not strings
print(choice(choice(l_index)))
CodePudding user response:
we can avoid using a variable that holds the list names.
from random import choice
l_1 = ['a', 'b', 'c']
l_2 = ['d', 'e', 'f']
print(choice(l_1 l_2))
CodePudding user response:
import random
l_1 = ['a', 'b', 'c']
l_2 = ['d', 'e', 'f']
l_index = [l_1, l_2]
selected_list = random.choice(l_index)
selected_element = random.choice(selected_list)
print(selected_element)
Your code was totally fine but in l_index
you used its element as string remove those quotes
WRONG ONE:
l_index = ['l_1', 'l_2']
RIGHT ONE:
l_index = [l_1, l_2]
else everything will be same