定义获取列表中最高产品对的函数
Defining a function that gets the highest product pairs in a list
我正在尝试编写一个函数,它给出列表中最高的一对相邻元素的乘积。对于我的代码,
gala = [1, 2, 3, 4, 5]
def adjacentElementsProduct(inputArray):
for i in range(len(inputArray)):
if inputArray[i] * inputArray[i+1] > inputArray[i+1] * inputArray[i+2]:
return inputArray[i] * inputArray[i+1]
elif inputArray[i+1] * inputArray[i+2] > inputArray[i] * inputArray[i+1] and inputArray[i+1] * inputArray[i+2] > inputArray[i+2] * inputArray[i+3]:
return inputArray[i+1] * inputArray[i+2]
elif inputArray[i+2] * inputArray[i+3] > inputArray[i+1] * inputArray[i+2] and inputArray[i+2] * inputArray[i+3] > inputArray[i+3] * inputArray[i+4]:
return inputArray[i+2] * inputArray[i+3]
else:
return inputArray[i+3] * inputArray[i+4]
return adjacentElementsProduct
adjacentElementsProduct(gala)
此处输出为 20(因为 4 x 5 是最高的相邻对)。即使我更改数字及其符号的顺序,此功能也适用于给定列表。但是,如果列表的长度发生变化,那么代码就会中断。如果列表是
gala = [1, -6]
或
gala = [2, 5, 7, -9, 10, 0, 11]
我希望函数第一个列表的输出为 -6,第二个为 35。但是我的函数因此类列表而中断。
如果我没有正确理解你的问题,我认为你的功能可以简化为:
def adjacentElementsProduct(elm):
if len(elm) < 2:
return None
return max(k*v for k, v in zip(elm, elm[1:]))
所以:
>>> adjacentElementsProduct([1, 2, 3, 4, 5])
20
>>> adjacentElementsProduct([1, -6])
-6
>>> adjacentElementsProduct([2, 5, 7, -9, 10, 0, 11])
35
@ChihebNexus 方法的修改:
from operator import mul
def adjacentElementsProduct(elm):
if len(elm) < 2:
return None
return max(map(mul, elm, elm[1:]))
更短的版本:
def adjacentElementsProduct(elm):
return max(map(mul, elm, elm[1:])) if len(elm) < 2 else None
还有一个:
from operator import mul
from itertools import starmap
def adjacentElementsProduct(elm):
if len(elm) < 2:
return None
return max(starmap(mul, zip(elm, elm[1:])))
我正在尝试编写一个函数,它给出列表中最高的一对相邻元素的乘积。对于我的代码,
gala = [1, 2, 3, 4, 5]
def adjacentElementsProduct(inputArray):
for i in range(len(inputArray)):
if inputArray[i] * inputArray[i+1] > inputArray[i+1] * inputArray[i+2]:
return inputArray[i] * inputArray[i+1]
elif inputArray[i+1] * inputArray[i+2] > inputArray[i] * inputArray[i+1] and inputArray[i+1] * inputArray[i+2] > inputArray[i+2] * inputArray[i+3]:
return inputArray[i+1] * inputArray[i+2]
elif inputArray[i+2] * inputArray[i+3] > inputArray[i+1] * inputArray[i+2] and inputArray[i+2] * inputArray[i+3] > inputArray[i+3] * inputArray[i+4]:
return inputArray[i+2] * inputArray[i+3]
else:
return inputArray[i+3] * inputArray[i+4]
return adjacentElementsProduct
adjacentElementsProduct(gala)
此处输出为 20(因为 4 x 5 是最高的相邻对)。即使我更改数字及其符号的顺序,此功能也适用于给定列表。但是,如果列表的长度发生变化,那么代码就会中断。如果列表是
gala = [1, -6]
或
gala = [2, 5, 7, -9, 10, 0, 11]
我希望函数第一个列表的输出为 -6,第二个为 35。但是我的函数因此类列表而中断。
如果我没有正确理解你的问题,我认为你的功能可以简化为:
def adjacentElementsProduct(elm):
if len(elm) < 2:
return None
return max(k*v for k, v in zip(elm, elm[1:]))
所以:
>>> adjacentElementsProduct([1, 2, 3, 4, 5])
20
>>> adjacentElementsProduct([1, -6])
-6
>>> adjacentElementsProduct([2, 5, 7, -9, 10, 0, 11])
35
@ChihebNexus 方法的修改:
from operator import mul
def adjacentElementsProduct(elm):
if len(elm) < 2:
return None
return max(map(mul, elm, elm[1:]))
更短的版本:
def adjacentElementsProduct(elm):
return max(map(mul, elm, elm[1:])) if len(elm) < 2 else None
还有一个:
from operator import mul
from itertools import starmap
def adjacentElementsProduct(elm):
if len(elm) < 2:
return None
return max(starmap(mul, zip(elm, elm[1:])))