有一列表list_1=[3,2,-4,5,-2,6,4],求列表里,相邻两个数最大的积,并返回这两个数。 那么首先,我们整理一下思路,这是一个有固定顺序的,所以不能直接从大到小排序取前2个相乘。 所以我们需要先计算出积,并把积排序。所以有以下几种解法 1.最简单的思路,把列表里相邻两个数循环相乘一次,并实时更新结果。 左边的数L,右边的数R,积P那么初始化一下
L=0
R=1
P=0
for i in range(len(list_1)-1):
if P<list_1[i]*list_1[i+1]:
L=list_1[i]
R=list_1[i+1]
P=list_1[i]*list_1[i+1]
print(L,R,P)
那么有没有稍微简洁点的解法? 2.利用lambda函数,结合map,并从小到大排序,然后取最大的结果: 为了方便阅读,我在list_1前面换行了,大家若是复制的,可以手动修正
print(sorted(list(map(lambda x,y:(x,y,x*y),
list_1,list_1[1:])),key=lambda x:x[2])[-1])
解释一下:lambda x,y入参 :x,y,x*y出参输出左边的数,右边的数和积。输出的是数组所以加个括号用元组方式保存,map函数会自动对齐,所以只需要从list_1的0位乘1位开始循环,到最后一位的时候,右边的数已经超出界限自动忽略了。map函数结果出来是一个元组组成的列表,所以我们 加一个shorted排个序,按列表里元组的积排序,所以key=lambda x:x[2]意思是取元组里第3个元素排序,默认是从小到大,所以最后打印的时候,再从列表里打印最大的积所在的列表,所以再切片[-1]即可输出正确结果。 代码已经在pc短检查过,没有问题了
|