从 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 列表中绘制相等数量的列表元素的主要内容,如果未能解决你的问题,请参考以下文章