Я пытаюсь создать функцию, которая принимает параметр входного списка и выполняет внутри некоторые математические вычисления, возвращая новый список с данными, собранными из математических расчетов, но в результате я всегда получаю пустой список. Как мне передать список в функцию, чтобы это работало?
inputArray = [12,6,7,3,8]
def derive (self, *inputArray):
outputarray = []
for i in inputArray:
operatorA = inputArray[i]
operatorB = inputArray[i+1]
if operatorA > operatorB:
operation = operatorA - operatorB
outputarray.append(operation)
else:
operation = operatorB - operatorA
outputarray.append(operation)
print(outputarray)
derive(inputArray)
for i in inputArray: выполняет итерацию не индексов, а элементов. Последующие обращения к `inputArray [i]` кажутся неуместными.
И параметр *inputArray вроде не так. Почему именно *?






Вы неправильно использовали for. Для итерации по индексу вы должны использовать for i in range(len(inputArray) - 1). Это будет перебирать список индексов.
Кроме того, вы создали функцию, которая требует 2 аргумента, но вызывает ее только с одним, поэтому я удалил self.
И в заключение, я полагаю, вы использовали * в попытке обратиться к строковому адресу. Это синтаксис C / C++, но не работает на python. Вместо этого вы можете вернуть значение в исходную строку:
inputArray = [12,6,7,3,8]
def derive (inputArray):
outputarray = []
for i in range(len(inputArray)-1):
operatorA = inputArray[i]
operatorB = inputArray[i+1]
if operatorA > operatorB:
operation = operatorA - operatorB
else:
operation = operatorB - operatorA
outputarray.append(operation)
print(outputarray)
return(outputarray)
inputArray = derive(inputArray)
Кстати, всю функцию (без печати) можно было бы переписать как: def derive(values):return [abs(values[i] - values[i+1]) for i in range(len(values)-1)].
Альтернатива для тела функции: return [abs(i - j) for i, j in zip(values, values[1:])]
Вам нужно вернуть выходное значение. Добавьте
return outputarrayв конец тела вашей функции.