Определение функции, которая получает самые высокие пары продуктов в списке - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь найти написать функцию, которая дает произведение самой старшей пары смежных элементов в списке. Для моего кода

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 х 5 - это самые высокие соседние пары) Эта функция работает для данного списка, даже если я изменяю порядок чисел и их знак. Однако, если длина списка изменяется, код ломается. Если список был

gala = [1, -6]

или

gala = [2, 5, 7, -9, 10, 0, 11]

Я хотел, чтобы вывод первого списка функции был -6, а второго - 35. Но моя функция прерывается для таких списков.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Модификация подхода @ 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:])))
0 голосов
/ 11 ноября 2018

Если я правильно понял вашу проблему, я думаю, что ваша функция может быть уменьшена до:

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
...