4

我知道您可以使用 random.choice 从列表中选择一个随机元素,但我正在尝试选择长度为 3 的随机元素。例如,

list1=[a,b,c,d,e,f,g,h]

我希望输出看起来像:

[c,d,e]

本质上,我想从列表中生成随机子列表。

4

4 回答 4

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']
于 2013-10-17T20:03:57.607 回答
7
idx = random.randint(0, len(list1)-3)
list1[idx:idx+3]
于 2013-10-17T20:08:13.110 回答
3

如果您希望结果环绕到列表的开头,您可以执行以下操作:

idx = randint(0, len(list1))
(list1[idx:] + list1[:idx])[:3]
于 2013-10-17T20:57:17.067 回答
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]
于 2013-10-17T20:10:19.937 回答