在 Python 中随机裁剪给定的输入序列?

Randomly Crop a Given Input Sequence in Python?

我想创建一个接受给定长度sequence/list输入的函数

(ex: [48083, 50118, 50118, 39631, 5868, 452, 32, 460, 15, 49, 1028, 4, 252, 32, 460, 15, 49, 1028, 55, 87, 195, 722, 10, 183, 117, 912, 479, 3684, 51, 109, 16, 2788, 124, 8, 556, 8, 95, 33, 333, 732, 2923, 15, 592, 433, 4.])

并且该函数将从输入

输出给定长度的随机序列,比如5

(ex: [48083, 50118, 50118, 39631, 5868] or [479, 3684, 51, 109, 16])

它基本上看起来像这样 -

def foo(x, len):
  return ...

x = [48083, 50118, 50118, 39631, 5868, 452, 32, 460, 15, 49]
output_seq = foo(x, 5) # [39631, 5868, 452, 32, 460]
output_seq = foo(x, 5) # [452, 32, 460, 15, 49]
output_seq = foo(x, 5) # [50118, 50118, 39631, 5868, 452]

这可以在 python3x 中完成吗?任何帮助将不胜感激?

你可以只使用 random.sample(x, len):

x = [48083, 50118, 50118, 39631, 5868, 452, 32, 460, 15, 49]
print(random.sample(x, 5))
print(random.sample(x, 5))
print(random.sample(x, 5))

输出:

[50118, 39631, 48083, 460, 452]
[452, 50118, 15, 49, 48083]
[15, 452, 48083, 50118, 39631]

您的问题归结为随机选择起始索引。您需要确保索引在末尾提供足够的空间来包含您想要的长度,该长度介于 0 和列表长度减去大小之间:

import random

l = [48083, 50118, 50118, 39631, 5868, 452, 32, 460, 15, 49, 1028, 4, 252, 32, 460, 15, 49, 1028, 55, 87, 195, 722, 10, 183, 117, 912, 479, 3684, 51, 109, 16, 2788, 124, 8, 556, 8, 95, 33, 333, 732, 2923, 15, 592, 433, 4.]

def foo(x, size):
    start = random.randint(0, len(x) - size)
    return x[start: start+size]

foo(l, 5)
# [109, 16, 2788, 124, 8]

foo(l, 5)
# [10, 183, 117, 912, 479]