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

5
我知道你可以使用random.choice从列表中选择一个随机元素,但我想选择长度为3的随机元素。例如,
list1=[a,b,c,d,e,f,g,h]

我希望输出的结果类似于:

我想要的输出结果如下:

[c,d,e]

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

你想要三个连续的元素还是三个随机的元素? - Patrick Kostjens
3个连续元素 - user2767074
4个回答

20

使用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']

7
idx = random.randint(0, len(list1)-3)
list1[idx:idx+3]

哇,应该早就想到这个了。一个非常简单的解决方案! - user2767074

3
如果您希望结果围绕到列表的开头,可以执行以下操作:
idx = randint(0, len(list1))
(list1[idx:] + list1[:idx])[:3]

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]

1
这会给出随机长度的列表。 - Martijn Pieters
@MartijnPieters- 哎呀!看错了问题。已经纠正,谢谢! - dckrooney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接