获取Python中列表的最小N个元素的索引
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了获取Python中列表的最小N个元素的索引,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1323字,纯文字阅读大概需要2分钟。
内容图文
![获取Python中列表的最小N个元素的索引](/upload/InfoBanner/zyjiaocheng/759/c9d51b3fe53648e6ac01413ebec93637.jpg)
我想获得列表中最小N个元素的索引.如果我可以在另一个列表上获得该输出,那将是很好的.
例如:
[1, 1, 10, 5, 3, 5]
output = [0, 1]
[10, 5, 12, 5, 0, 10]
output = [4]
[9, 2, 8, 2, 3, 4, 2]
output = [1, 3, 6]
[10, 10, 10, 10, 10, 10]
output = [0, 1, 2, 3, 4, 5]
我知道.index返回列表中最小值的第一个索引,但我不知道如何在多次出现时返回最小值的所有索引.
解决方法:
>>> L = [9, 2, 8, 2, 3, 4, 2]
>>> minL = min(L)
>>> [i for i, x in enumerate(L) if x == minL]
[1, 3, 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
内容总结
以上是互联网集市为您收集整理的获取Python中列表的最小N个元素的索引全部内容,希望文章能够帮你解决获取Python中列表的最小N个元素的索引所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。