在Python中选择长度为n的随机列表元素

在Python中选择长度为n的随机列表元素,python,random,Python,Random,我知道您可以使用random.choice从列表中选择一个随机元素,但我正在尝试选择长度为3的随机元素。比如说, list1=[a,b,c,d,e,f,g,h] 我希望输出看起来像: [c,d,e] 基本上,我想从列表中生成随机子列表。您想要一个样本;用于选择包含3个元素的列表: random.sample(list1, 3) 演示: 如果您需要一个子列表,则必须选择一个介于0和长度减3之间的随机起始索引: def random_sublist(lst, length): star

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

list1=[a,b,c,d,e,f,g,h]
我希望输出看起来像:

[c,d,e]
基本上,我想从列表中生成随机子列表。

您想要一个样本;用于选择包含3个元素的列表:

random.sample(list1, 3)
演示:

如果您需要一个子列表,则必须选择一个介于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']

如果只需要原始列表的随机子集,则可以使用

import random
random.sample(your_list, sample_size)
但是,如果希望子列表是连续的(如您给出的示例),则最好选择两个随机索引并相应地对列表进行切片:

a = random.randint(0, len(your_list) - sample_length)
sublist = your_list[a:b+sample_length]

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

idx = randint(0, len(list1))
(list1[idx:] + list1[:idx])[:3]

你想要3个连续的元素还是3个随机的元素?3个连续的元素我想他想要一个连续的子列表,举个例子。是的,我应该指定我想要一个连续的子列表。这给出了随机长度的列表。@MartijnPieters-Oops!误读了这个问题。更正,谢谢!哇,应该想到这个。一个非常简单的解决方案!
a = random.randint(0, len(your_list) - sample_length)
sublist = your_list[a:b+sample_length]
idx = randint(0, len(list1))
(list1[idx:] + list1[:idx])[:3]