从 python 列表中绘制相等数量的列表元素

Posted

技术标签:

【中文标题】从 python 列表中绘制相等数量的列表元素【英文标题】:Draw equal number of list elements from python list 【发布时间】:2020-07-18 21:23:28 【问题描述】:

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

我想从这些列表中的每一个中挑选 23 个数据点,但是我希望它们在索引位置方面或多或少地平均分布。

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

从包含 46 个元素的列表中,它将是每个第二个元素,依此类推,因为它变得越来越大。

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

用 start、stop 和 step 尝试了 itertools.islice,但实际上无法弄清楚,因为步长必须变化,我最终会遇到实际拉 22 或 24 等的情况。

感谢您的帮助 E

【问题讨论】:

您能否提供一个示例输入和输出。它有助于我们更好地理解问题。 【参考方案1】:

这是一个单行函数,用于从 a_list 返回一个包含 n 个项目的列表,尽可能均匀分布。您可能想要添加一些错误处理,例如 if n

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]

【讨论】:

正常工作。非常感谢! 您介意接受它以便其他人知道这是一个有效的答案吗?

以上是关于从 python 列表中绘制相等数量的列表元素的主要内容,如果未能解决你的问题,请参考以下文章

python - 如何在python中使用IF语句检查两个列表的元素是不是相等?

python 判断某个列表中的所有元素在另一个列表中

python 检查列表中的所有元素是否相等

从列表中返回每个元素(Python)

在 Python 中计算包含元素的列表的数量

python两个长度相等的list元素合并?