【问题标题】:Indices of the N smallest elements of a list列表的 N 个最小元素的索引
【发布时间】:2019-11-13 04:50:14
【问题描述】:

我试图从一个列表中找到 3 个最低的数字,并使用这些索引从另一个列表中找到相应的值。 这是我尝试过的一个例子

a = [12, 83, 22, 30, 57, 32, 88, 46, 20, 26, 78, 65, 45, 56, 74]

b = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']

lowest = lowest2 = lowest3 =  max(a)

indexes = []

for i in range(0,len(a)):
    if a[i] < lowest :  
            lowest = a[i] 
            print(b[i])

    elif a[i] < lowest2 and a[i] > lowest:  
            lowest2 = a[i]
            print(b[i])

    elif a[i] < lowest3 and a[i] > lowest2:  
            lowest3 = a[i]
            print(b[i])

    print(lowest,lowest2,lowest3)

我只能使用 anaconda 库,不,这不是分配,这是我一直在尝试做的程序的一小部分。

输出:一个 b C d 一世 j 12 20 26

【问题讨论】:

  • 你试过的代码的输出是什么?你收到任何错误信息吗?提供这个有问题的
  • 您的列表是否总是包含唯一值?
  • 是的。这只是我做的一个例子。它通常是信号中存在的频率,其他列表是对应的音调。
  • 我猜你想要 12、20 和 22。对应的元素是 a、i、c。
  • 是的!这正是我正在寻找的。​​span>

标签: python python-3.x list


【解决方案1】:

你可以做的是对列表a进行排序并返回它的索引值,

>>> a = [12, 83, 22, 30, 57, 32, 88, 46, 20, 26, 78, 65, 45, 56, 74]
>>> n_min_values = 3 
>>> sorted(range(len(a)), key=lambda k: a[k])[:n_min_values] 
[0, 8, 2] # index values

并遍历此索引值列表以从列表b中获取相应的值,

>>> b = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']
>>> for i in sorted(range(len(a)), key=lambda k: a[k])[:n_min_values ]:
        print(b[i])
a
i
c

使用列表理解,

>>> [b[i] for i in sorted(range(len(a)), key=lambda k: a[k])[:n_min_values ]]
['a', 'i', 'c'] # your output

【讨论】:

    【解决方案2】:

    堆擅长做这种事情,尤其是在最小项目的顺序不重要的情况下。

    这是一个在 a 上使用 heapq.nsmallest 及其压缩索引的小示例。

    from heapq import nsmallest
    from operator import itemgetter
    
    n = 3
    idx, _ = zip(*nsmallest(n, enumerate(a), key=itemgetter(1)))
    idx
    # (0, 8, 2)
    
    [b[i] for i in idx]  # your result
    # ['a', 'i', 'c']
    

    【讨论】:

    • 我认为您可以将 zip() 替换为 enumerate()
    • @AlexanderCécile 谢谢,我的 python 有点生锈了 :)
    猜你喜欢
    • 2023-03-13
    • 2019-08-31
    • 2011-02-16
    • 2017-08-26
    • 1970-01-01
    • 2020-05-30
    • 2022-01-18
    • 2012-12-17
    • 1970-01-01
    相关资源
    最近更新 更多