在Python中从最大和最小的值中依次获得一个列表的n个元素

商业

如果你想在Python中从最大或最小的值中依次得到一个列表(数组)的n个元素,并且n=1,你可以使用下面的内置函数。

  • max()
  • min()

如果n>1,有两种方法可以对列表进行排序,或者使用标准库的heapq模块。

  • 获得最大和最小值: max(),min()
  • 按最大值和最小值的顺序获取n个元素:分类
  • 按最大值和最小值的顺序获取n个元素:heapq模块

如果要检索的元素数量很大,先用sorted()或sort()进行排序会更有效率,如果数量少,heapq模块的nargest()和nsmallest()会更有效率。

要获得最大值和最小值的索引,请使用max()、min()和index()。

获得最大和最小值: max(), min()

要获得列表的最大和最小元素,请使用内置函数max()和min()。

l = [3, 6, 7, -1, 23, -10, 18]

print(max(l))
# 23

print(min(l))
# -10

按照最大值和最小值的顺序获取n个元素。排序

如果你想从最大或最小的值中依次得到一个列表的n个元素,第一个方法是对列表进行排序(sort)。

要对列表进行排序,可以使用内置函数 sorted() 或列表的 sort() 方法。 sorted() 返回一个新的排序的列表,而 sort() 则对原始列表进行重新排序。

通过用参数reverse切换升序/降序,并从顶部选择任何数量的片断,你可以从列表的最大/最小值中依次得到n个元素。

ld = sorted(l, reverse=True)
print(ld)
# [23, 18, 7, 6, 3, -1, -10]

print(ld[:3])
# [23, 18, 7]

la = sorted(l)
print(la)
# [-10, -1, 3, 6, 7, 18, 23]

print(la[:3])
# [-10, -1, 3]

你可以把它们都写在一行里。

print(sorted(l, reverse=True)[:3])
# [23, 18, 7]

print(sorted(l)[:3])
# [-10, -1, 3]

如果你不介意改变原始列表的顺序,你可以使用sort()方法。

print(l)
# [3, 6, 7, -1, 23, -10, 18]

l.sort(reverse=True)
print(l[:3])
# [23, 18, 7]

print(l)
# [23, 18, 7, 6, 3, -1, -10]

l.sort()
print(l[:3])
# [-10, -1, 3]

print(l)
# [-10, -1, 3, 6, 7, 18, 23]

按最大值和最小值的顺序获取n个元素: heapq模块

如果你想从最大或最小的值中依次得到一个列表的n个元素,你可以使用heapq模块。

在heapq模块中使用以下函数。在这种情况下,原来的列表将不会被改变。

  • nlargest()
  • nsmallest()

第一个参数是要检索的元素的数量,第二个参数是要针对的可迭代的(列表等)。

import heapq

l = [3, 6, 7, -1, 23, -10, 18]

print(heapq.nlargest(3, l))
# [23, 18, 7]

print(heapq.nsmallest(3, l))
# [-10, -1, 3]

print(l)
# [3, 6, 7, -1, 23, -10, 18]

正如我在开头写的,如果要检索的元素数量很大,先用sorted()或sort()进行排序会更有效率,如果数量少,heapq模块的nargest()和nsmallest()会更有效率。