加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

获取Python中列表的最小N个元素的索引

发布时间:2020-12-20 12:08:00 所属栏目:Python 来源:网络整理
导读:我想获得列表中最小N个元素的索引.如果我可以在另一个列表上获得该输出,那将是很好的. 例如: [1,1,10,5,3,5]output = [0,1][10,12,10]output = [4][9,2,8,4,2]output = [1,6][10,10]output = [0,5] 我知道.index返回列表中最小值的第一个索引,但我不知道如
我想获得列表中最小N个元素的索引.如果我可以在另一个列表上获得该输出,那将是很好的.

例如:

[1,1,10,5,3,5]
output = [0,1]

[10,12,10]
output = [4]

[9,2,8,4,2]
output = [1,6]

[10,10]
output = [0,5]

我知道.index返回列表中最小值的第一个索引,但我不知道如何在多次出现时返回最小值的所有索引.

解决方法

>>> L = [9,2]
>>> minL = min(L)
>>> [i for i,x in enumerate(L) if x == minL]
[1,6]

目前,其他解决方案将在迭代期间调用min,导致较差且不必要的O(n ^ 2)复杂度.

编辑Kasra:天真解决方案的n ^ 2复杂性的证据:

>>> L1000 = [randint(0,100) for _ in xrange(1000)]
>>> L2000 = [randint(0,100) for _ in xrange(2000)]
>>> L3000 = [randint(0,100) for _ in xrange(3000)]
>>> L4000 = [randint(0,100) for _ in xrange(4000)]
>>> L5000 = [randint(0,100) for _ in xrange(5000)]
>>> timeit [i for i,x in enumerate(L1000) if x == min(L1000)]
10 loops,best of 3: 18.8 ms per loop
>>> timeit [i for i,x in enumerate(L2000) if x == min(L2000)]
10 loops,best of 3: 73.6 ms per loop
>>> timeit [i for i,x in enumerate(L3000) if x == min(L3000)]
1 loops,best of 3: 166 ms per loop
>>> timeit [i for i,x in enumerate(L4000) if x == min(L4000)]
1 loops,best of 3: 294 ms per loop
>>> timeit [i for i,x in enumerate(L5000) if x == min(L5000)]
1 loops,best of 3: 457 ms per loop

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读