我有一个这样的清单:
myList = [10, 7, 11, 5, 8, 9, 6]
我想在列表中的绝对最小值之后找到最大元素和索引。我通过制作一个包含5个以上所有元素的新列表然后找到最大值来完成它。但如果可能的话,我想用原始列表做所有事情。
那么,如何在绝对最小值之后找到它的最大值和索引?
答案 0 :(得分:2)
你可以这样做
myList = [10, 7, 11, 5, 8, 9, 6]
min_index = myList.index(min(myList))
print(max(myList[min_index:]))
输出
9
答案 1 :(得分:2)
你可以试试这个:
myList = [10, 7, 11, 5, 8, 9, 6]
abs_max = max(myList[myList.index(min(myList)):])
输出:
9
答案 2 :(得分:1)
像这样:
max(myList[myList.index(min(myList)):])
答案 3 :(得分:1)
O(1)空间:
myList = [10, 7, 11, 5, 8, 9, 6]
n = len(myList)
key = myList.__getitem__
imin = min(range(n), key=key)
imax = max(range(imin + 1, n), key=key)
print('maximum', myList[imax], 'is at index', imax)
打印:
maximum 9 is at index 5
答案 4 :(得分:0)
如果您事先不知道绝对最小值是什么,那么您将不得不遍历整个列表,在这种情况下,您可以将最小和最大值存储在单独的变量中然后使用如果您确实不想创建新列表,请index
找到它们。
*编辑:Sagun的答案更为复杂。
答案 5 :(得分:0)
您也可以使用enumerate()
:
>>> from operator import itemgetter
>>> myList = [10, 7, 11, 5, 8, 9, 6]
>>> min_index = min(enumerate(myList), key = itemgetter(1))[0] # or key = lambda x: x[1]
>>> max(myList[min_index:])
9
答案 6 :(得分:0)
请记住,调用内置min
和max
函数的大多数函数会多次扫描列表,但不会超过两次:第一次扫描min将扫描整个列表,第二个将扫描部分列表。另外,要注意创建列表幻灯片的解决方案(提示:查找冒号(:
)符号。创建幻灯片是正常的,除非列表的大小很大,否则性能会受到影响。
我的解决方案将扫描列表一次,不会创建任何子列表:
def minmax(seq):
min_value = max_value = seq[0]
for element in seq:
if element <= min_value:
min_value = max_value = element
elif element > max_value:
max_value = element
return min_value, max_value
print(minmax([10, 7, 11, 5, 8, 9, 6]))
输出:
(5, 9)
element
小于当前min_value
),我们会重置min_value
和{{1} }。如果我们看到新的最大值,请更新它。