在Python中随机选择一个列表?

时间:2018-12-19 19:04:38

标签: python

我正在用Python制作子手游戏,我了解如何从列表中随机选择一个项目,但是我想知道是否有一种方法可以从总体上随机选择列表。

例如,我有两个列表,list1和list2 有没有一种方法可以在list1和list2之间随机选择,然后从随机选择的列表中随机选择一个单词。

我希望这是有道理的

4 个答案:

答案 0 :(得分:6)

您可以两次使用random.choice

import random

first = ['one', 'word']
second = ['two', 'more', 'and']

selected = random.choice(random.choice([first, second]))

print(selected)

输出

word

答案 1 :(得分:2)

import random

# Create a list of your lists
list_of_lists = [lists1, list2, list3]

# Select a random list from your list of lists
random_list = random.choice(list_of_lists)

# Select a random word from the randomly selected list
random_word = random.choice(random_list)

答案 2 :(得分:0)

您可以使用random.choice选择一个随机列表,然后再次使用random.choice从该列表中选择一个值:

import random

list1 = ['1','2','3']
list2 = ['4','5','6']

word = random.choice(random.choice([list1, list2]))

答案 3 :(得分:0)

如果其他答案覆盖了两个列表的情况。

如果您有一个任意嵌套的,可能是不规则的列表(或序列),则可以编写一个递归函数。

from collections import Sequence
import random

def go_deeper(x): 
     return (isinstance(x, Sequence) and not 
             isinstance(x, (str, bytes))) # and other sequence types you wish to exclude                                                                          

def select(candidate): 
     if go_deeper(candidate): 
         return select(random.choice(candidate)) 
     return candidate

演示:

>>> l = ['foo', 'bar']                                                                                                 
>>> select(l)                                                                                                          
'bar'
>>>                                                                                                                    
>>> l = [[[(0,)]]]                                                                                                        
>>> select(l)                                                                                                          
0
>>>                                                                                                                    
>>> l = [1, 2, [3, 4, [5]], [[6, [7, 8]], 9]]                                                                          
>>> select(l)                                                                                                          
9
>>> select(l)                                                                                                          
1
>>> select(l)                                                                                                          
2