首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从列表中选择n个值,跨越整个范围

从列表中选择n个值,跨越整个范围
EN

Stack Overflow用户
提问于 2019-06-20 05:53:35
回答 2查看 53关注 0票数 0

我有一个数字列表,我想选择在列表中均匀分布的n个值。

例如:

代码语言:javascript
复制
vals = list(range(10))
select_n(vals, 4)
select_n(vals, 5)

应该给予

代码语言:javascript
复制
[0, 3, 6, 9]
[0, 2, 5, 7, 9]

我现在的想法是这样迭代:

代码语言:javascript
复制
[vals[round((len(vals) - 1)/(n-1) * i)] for i in range(n)]

有没有Python或NumPy函数可以做到这一点?如果没有,有没有更有效的方法来写这个?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-20 06:50:49

你可以使用np.linspace来完成“繁重的”任务:

代码语言:javascript
复制
from operator import itemgetter

a = [*range(10)]

N = 5

# if tuple ok 
itemgetter(*np.linspace(0.5,len(a)-0.5,N,dtype=int))(a)
# (0, 2, 5, 7, 9)

# if must be list
[a[i] for i in np.linspace(0.5,len(a)-0.5,N,dtype=int)]
# [0, 2, 5, 7, 9]
票数 1
EN

Stack Overflow用户

发布于 2019-06-20 05:59:25

你可以这样做:

代码语言:javascript
复制
def select_n(vals,cnt):
    inc = int(len(vals)/cnt)
    # print(inc)
    res = [vals[i] for i in range(0,len(vals),inc)]
    # print(res)
    return res

vals = list(range(10))
# print(vals)
res = select_n(vals,4)
print(res)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56676387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档