我知道你可以使用random.choice从列表中选择一个随机元素,但我试图选择长度为3的随机元素。例如,
list1=[a,b,c,d,e,f,g,h]
我希望输出看起来像:
[c,d,e]
基本上我想从列表中生成随机子列表。
答案 0 :(得分:19)
你想要一个样本;使用random.sample()
选择3个元素的列表:
random.sample(list1, 3)
演示:
>>> import random
>>> list1 = ['a', 'b', 'c' ,'d' ,'e' ,'f', 'g', 'h']
>>> random.sample(list1, 3)
['e', 'b', 'a']
如果您需要一个子列表,那么您将无法选择0和长度减去3之间的随机起始索引:
def random_sublist(lst, length):
start = random.randint(len(lst) - length)
return lst[start:start + length]
的工作原理如下:
>>> def random_sublist(lst, length):
... start = random.randint(len(lst) - length)
... return lst[start:start + length]
...
>>> random_sublist(list1, 3)
['d', 'e', 'f']
答案 1 :(得分:6)
idx = random.randint(0, len(list1)-3)
list1[idx:idx+3]
答案 2 :(得分:2)
如果你想要的只是原始列表的随机子集,你可以使用
import random
random.sample(your_list, sample_size)
但是,如果您希望子列表是连续的(如您给出的示例),那么最好选择两个随机索引并相应地切割列表:
a = random.randint(0, len(your_list) - sample_length)
sublist = your_list[a:b+sample_length]
答案 3 :(得分:2)
如果您希望将结果环绕到列表的开头,您可以执行以下操作:
idx = randint(0, len(list1))
(list1[idx:] + list1[:idx])[:3]