从 python 列表中抽取相等数量的列表元素

Draw equal number of list elements from python list

我收集了存储在 1000 个 python 列表中的数据。数据是浮点数。列表的长度不同。最小的列表有 23 个数据点,最大的有 173 个。

我想从每个列表中选择 23 个数据点,但是我希望它们在索引位置方面或多或少均匀分布。

因此,从最小的列表开始,它就是每个元素。

从具有 46 个元素的列表中,它将是每个第二个元素,依此类推,因为它变大了。

这里的挑战显然是那些像 40 个元素或 91 个元素,它们确实不能平均分配,并且随机真的不会给我沿索引的平均分配。

尝试 itertools.islice 开始、停止和步进,但真的无法弄清楚,因为步长必须变化,我最终会遇到实际拉 22 或 24 等的情况。

感谢您的帮助 E

这是一个单行函数,用于 return 包含 a_list 中 n 项的列表,尽可能均匀分布。您可能想要添加一些错误处理,例如 if n < len(a_list).

def select_n(a_list, n):
    return [a_list[len(a_list) * k // n] for k in range(n)]

print(select_n(list(range(150)), 23))
print(select_n(list(range(23)), 23))
print(select_n(list(range(45)), 23))

输出:

[0, 6, 13, 19, 26, 32, 39, 45, 52, 58, 65, 71, 78, 84, 91, 97, 104, 110, 117, 123, 130, 136, 143]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22]
[0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43]