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 に答える
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)

ただし、サブリストを連続させたい場合 (指定した例のように)、2 つのランダムなインデックスを選択し、それに応じてリストをスライスする方がよい場合があります。

a = random.randint(0, len(your_list) - sample_length)
sublist = your_list[a:b+sample_length]
于 2013-10-17T20:10:19.937 に答える