遍历列表以查找最大值并将其交换到最前面

时间:2018-11-07 01:21:58

标签: python

问题恰好是:创建一个函数(jumpMaximum),在给定整数列表的任何列表的情况下,该函数返回具有与list相同的元素的列表, 除了第一个元素已与列表中的最大元素交换。 注意:此功能不应打印列表,而应将其返回。 到目前为止,我的代码是:

def jumpMaximum (list):
    maximum= list[0]
    for i in range(len(list)):
        for j in range(len(list)):    
            if i>j and i>maximum:
                maximum=i
                maximum, list[0] = list[0], maximum
    return list
print(jumpMaximum([1,2,3,4]))

现在,当我运行它时,我得到[3,2,3,4],但这当然是错误的。我做了for循环来遍历列表并找到最大值。然后我写了// maximum,list [0] = list [0],maximum //将第一个元素与max交换,所以我不确定它出了什么问题。

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

def jump_maximum(lst):
    _, i = max((e, i) for i, e in enumerate(lst))
    lst[0], lst[i] = lst[i], lst[0]
    return lst


print(jump_maximum([1, 2, 3, 4]))

输出

[4, 2, 3, 1]

想法是结合使用enumeratemax来找到最大元素的索引(i),然后简单地交换元素并返回列表。

作为旁注,您不应为变量使用诸如列表之类的名称,因为它会遮盖内置的list

更新

如果您不能使用enumeratemax,可以这样做:

def jump_maximum(lst):

    i, ma = 0, lst[0]
    for j in range(len(lst)):
        if lst[j] > ma:
            ma = lst[j]
            i = j

    lst[0], lst[i] = lst[i], lst[0]
    return lst


print(jump_maximum([1, 2, 3, 4]))

输出

[4, 2, 3, 1]

这个想法是用enumerate循环代替maxfor。另外,您不需要嵌套循环。