Как передать список как вход функции в Python

Я использую Python, и у меня есть функция, которая принимает список в качестве аргумента. Например, я использую следующий синтаксис,

def square(x,result= []): for y in x: result.append=math.pow(y,2.0) return result print(square([1,2,3])) 

а выход – [1] где я должен получить [1,4,9] .

Что я делаю не так?

7 Solutions collect form web for “Как передать список как вход функции в Python”

В настоящее время вы возвращаете значение из своей функции в первой итерации цикла for . Из-за этого вторая и третья итерации цикла for никогда не происходят. Вам нужно переместить оператор return вне цикла следующим образом:

 import math def square(x): result = [] for y in x: result.append(math.pow(y,2.0)) return result print(square([1,2,3])) 

Вывод

 [1.0, 4.0, 9.0] 

Почему бы не устранить проблему в целом?

 def square(vals): return [v*v for v in vals] 

Edit: Первая проблема, как отметили несколько человек, заключается в том, что вы коротко замыкаете цикл for . Ваше return должно появиться после цикла, а не в нем.

Следующая проблема заключается в том, что вы используете list.append – вам нужно называть его, а не назначать ему, то есть result.append(y*y) . result.append = y*y вместо этого перезаписывает метод с числовым значением, возможно, выдает ошибку при следующем вызове.

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

 print(square([1,2,3]) # => [1, 4, 9] print(square([1,2,3]) # => [1, 4, 9, 1, 4, 9] 

Поскольку вы передаете изменяемый элемент (список) по умолчанию, все дальнейшее использование этого элемента по умолчанию указывает на тот же исходный список .

Вместо этого попробуйте

 def square(vals, result=None): if result is None: result = [] result.extend(v*v for v in vals) return result 

Мы даже используем result ? Вы можете использовать понимание списка, чтобы сгенерировать результат, который вы затем вернете. Я не уверен, почему вы передали result как переменную в функцию, так как она не используется.

Кроме того, return result внутри вашего цикла означает, что функция возвращает значение на первой итерации, поэтому он просто возвращает квадрат первого числа в списке.

 import math def square(x): return [math.pow(y, 2) for y in x] >>> print(square([1,2,3])) [1.0, 4.0, 9.0] 

Вы должны вернуться за цикл for. В противном случае он прекратится после первой итерации.

 def square(x): result=[] for y in x: result.append=math.pow(y,2.0) return result print(square([1,2,3]) 

Вы можете быть заинтересованы в использовании yield

 def square(x): for y in x: yield math.pow(y, 2.0) 

так вы можете позвонить

 for sq in square(x): ... 

который не будет генерировать весь список квадратов сразу, а скорее один элемент на итерацию, или использовать list(square(x)) для получения полного списка по требованию.

Это интересная возможность использовать немного более функциональный стиль:

 import math map(lambda x:(math.pow(x,2)), [1,2,3]) 

Это использует функцию map , которая берет список и функцию, и возвращает новый список, в котором эта функция была применена индивидуально каждому члену списка. В этом случае он применяет math.pow(x,2) к каждому члену списка, где каждое число равно x.

Обратите внимание, что map(lambda x:(math.pow(x,2)), [1,2,3]) возвращает итерабельность, что действительно удобно, но если вам нужно получить список, просто оберните весь оператор в list() .

ваш код не имеет смысла нигде. синтаксическая ошибка в конце отсутствует закрывающая скобка для печати, обратный вызов внутри цикла for означает, что он выполняется только один раз, а result.append – это функция, а не конструктор sp, правильный вызов

 result.append(math.pow(y,2)) 

единственное, что не является проблемой, – это передача списка, который является вашим вопросом, функция получает весь список, если вы это делаете

 def f(a): print a f([1,2,3]) 

вне

 [1,2,3,] 
  • + и + = разные операторы?
  • Быстрый способ отклонения списка в Python
  • Дикт и список диктов: преобразование и когда использовать
  • Python - Как отсортировать список списков по четвертому элементу в каждом списке?
  • Как подклассифицировать список Python без проблем типа?
  • Создать случайный список целых чисел в Python
  • Pythonic способ проверить, отсортирован ли список или нет.
  • Сортировка на разных уровнях в Python
  • Python - лучший язык программирования в мире.