python中在列表中查找元素时可以使用_Python – 有效地查找列表中的元素

如果要在未排序列表中找到n个最小值,请查看heapq.nsmallest(),如果n不是太大,则可能更有效.要找到最小值的位置,请尝试以下方法:

>>> from heapq import nsmallest

>>> from random import random

>>> values = [random() for i in range(20)]

>>> values

[0.012227103410989537, 0.9782624648209769, 0.9896111545377924, 0.9033620518745159, 0.6767780103989406, 0.4595455061820246, 0.39814471642551696, 0.6904798136040561, 0.8727083752258934, 0.6680153337266017, 0.606044647078923, 0.5644656135679249, 0.934351848916147, 0.05955628567745763, 0.7236000566917332, 0.8303865367817055, 0.9671576336593124, 0.3164892315873573, 0.8416372881413415, 0.5009057933309073]

>>> nsmallest(4, range(len(values)), key=lambda i: values[i])

[0, 13, 17, 6]

或者更快但稍微不那么清楚:

>>> nsmallest(4, range(len(values)), key=values.__getitem__)

[0, 13, 17, 6]

对于您的列表,您可能需要类似(未经测试的代码):

def indices():

for k in range(47):

for j in range(1000):

for i in range(40):

yield k, j, i

def keyfn(ind):

k, j, i = ind

return list_a[k][j][i]

print(nsmallest(4, indices(), key=keyfn))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值