Python 如何在不改变第一个列表顺序的情况下找到n个最小的数字?

Python 如何在不改变第一个列表顺序的情况下找到n个最小的数字?,python,python-3.x,list,sorting,Python,Python 3.x,List,Sorting,我打算获得列表中的n最小数字,但保持数字在列表中的显示顺序相同。例如: 这是我的清单: A = [1, 3, 4, 6, 7, 6, 8, 7, 2, 6, 8, 7, 0] 我希望得到前三个最低的数字,因为它已在第一个列表中排序: [1, 2, 0] 我不想将结果排序为: [0, 1, 2] 我试过: heapq.nsmallest(3,A) 但我想知道是否可以将此列表保留为:[1,2,0] 顺便说一句,我不是Python程序员,因此提前感谢您的帮助。您可以尝试以下方法: new_a

我打算获得列表中的
n
最小数字,但保持数字在列表中的显示顺序相同。例如:

这是我的清单:

A = [1, 3, 4, 6, 7, 6, 8, 7, 2, 6, 8, 7, 0]
我希望得到前三个最低的数字,因为它已在第一个列表中排序:

[1, 2, 0]
我不想将结果排序为:

[0, 1, 2]
我试过:

heapq.nsmallest(3,A)
但我想知道是否可以将此列表保留为:[1,2,0]

顺便说一句,我不是Python程序员,因此提前感谢您的帮助。

您可以尝试以下方法:

new_a = []
A=[1, 3, 4, 6, 7, 6, 8, 7, 2, 6, 8, 7, 0]
for a in A:
   if a not in new_a:
      new_a.append(a)
new_a = [i for i in new_a if i in sorted(new_a)[:3]]
输出:

[1, 2, 0]
您可以使用从列表中获取
n
最小元素。然后使用从该列表创建一个多集,您可以使用该多集检查原始列表中要包含在结果中的元素,例如

>>> from heapq import nsmallest
>>> from collections import Counter
>>> A = [1, 3, 4, 6, 7, 6, 8, 7, 2, 6, 8, 7, 0]
>>> n = 3    
>>> c = Counter(nsmallest(n, A))
>>> result = []
>>> for elem in A:
...     if c.get(elem, 0):
...         result.append(elem)
...         c[elem] -= 1
... 
>>> result
[1, 2, 0]

到目前为止你试过什么?这不是一个家庭作业完成的网站。这是非常低效的,因为<代码> >代码(<代码> >在<代码> A/<代码> 2中的每个项目都被调用)<代码> >我在SoReD()/<代码>检查变得慢如<代码> n>代码>……并且实际上是不正确的:考虑<代码> a=(0, 0, 0,0, 1, 1,1),n=5</代码>的情况。如果你交换最后一个元素,我的意思是0,它将返回[1,3,2],这与答案[1,2,2]不同