如果你想在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()会更有效率。