将最高元素交换到最后一个位置但是在交换元素后它不会打印列表

时间:2017-10-04 08:27:55

标签: python sorting

我正在尝试将最后一项与列表中的最大数字交换,但它不会打印任何内容

a=[3,4,2,2,43,7]
maxindex=0
for i in range(len(a)):
    if a[i] is max(a):
        maxno = a[i]
        maxindex = i
if a[maxindex] < a[len(a)-1]:
    a[maxindex],a[len(a)-1] = a[len(a)-1],a[maxindex] 
    print(a)

预期结果为[3,4,2,2,7,43]

4 个答案:

答案 0 :(得分:1)

查找两个数字的索引。将它们分配给两个单独的变量。然后,交换它们,如下:

>>> a = [3,4,2,2,43,7]
>>> last_index = a.index(a[-1])
>>> max_num_index = a.index(max(a))
>>> a[last_index], a[max_num_index] = a[max_num_index], a[last_index]
>>> a
[3, 4, 2, 2, 7, 43]

答案 1 :(得分:0)

这应解决它:

a=[3,4,2,2,74, 300,70]
a[a.index(max(a))], a[-1] = a[-1], a[a.index(max(a))]
print(a)

备注:这仅适用于没有重复的最大元素。

答案 2 :(得分:0)

您可以通过一种简单的方式完成此操作:通过查找最大项目的位置来交换最后一项的最大项目

a = [3,4,2,2,43,7]

a[a.index(max(a))], a[-1] = a[-1], a[a.index(max(a))]

print(a)

输出:

[3, 4, 2, 2, 7, 43]

为了提高效率(正如注释中PM2Ring所指出的那样),并且避免找到最多两次(O(n)操作),您可以先将索引保存在变量中,然后在交换中使用它: / p>

a = [3,4,2,2,43,7]
max_index = a.index(max(a))
a[max_index], a[-1] = a[-1], a[max_index]

print(a)

答案 3 :(得分:0)

方法1:

a = [3,43,2,2,43,7]
maximum = max(a)
for index,data in enumerate(a):
         if data == maximum:
             a[index] = a[-1]
a[-1] = maximum
print a

方法2 [使用列表理解]:

a = [a[-1] if data == maximum else data for index,data in enumerate(a)]
a[-1] = maximum
print a