挑战:从包含5个元素的列表中找出4个元素中可以得到的最小和最大的和。你知道吗
方法如下:按降序和升序对列表排序,并将它们存储到两个不同的变量中。求两个列表中前4个元素的和。一个总数最少,第二个总数最多。你知道吗
代码:
arr = [2,1,3,4,5]
arr.sort()
asc = arr
print(asc[0],asc[1],asc[2],asc[3])
arr.sort(reverse = True)
des = arr
print(des[0],des[1],des[2],des[3])
maxi = 0
mini = 0
for j in range(4) :
mini = mini + asc[j]
print(mini, asc[j])
maxi = maxi + des[j]
print(maxi,des[j])
print(mini, maxi)
这里介绍的print语句很少用于调试。在代码中可以看到,排序的版本在进入for循环之前和进入循环之后打印。从输出中可以清楚地看到,应该按升序保存元素的列表是按降序保存元素的。你知道吗
输出:
11 12 13 14 - list in the ascending order
15 14 13 12 - list in the descending order
15 15 - round 0
15 15
29 14 - round 1
29 14
42 13 - round 2
42 13
54 12 - round 3
54 12
54 54 - final output
为什么一个特定列表中的元素在进入for循环时会改变顺序??你知道吗
在执行
asc = arr
和des = arr
时,不会创建新列表。asc
、des
和arr
链接到一个列表对象,因此您更改其中任何一个时,所有变量都将更改为单个对象。你知道吗如果你想要一份清单的话
你需要做:
或者,当
arr
被反向排序时,asc
也会发生变化。asc
是指向数组的指针,当arr
更改时,asc
更改。更好的方法是,创建一个arr
的副本,这样更改就不会反射回来。您编写的整个代码可以浓缩为以下两行:
相关问题 更多 >
编程相关推荐