Возврат каждого элемента из списка (Python)
Я знаю, что функция может возвращать несколько значений в Python. То, что я хотел бы сделать, это вернуть каждый элемент в списке в качестве отдельного возвращаемого значения. Это может быть произвольное количество элементов, в зависимости от ввода пользователя. Мне интересно, есть ли питонский способ сделать это?
Например, у меня есть функция, которая будет возвращать пару элементов в виде массива, например, он будет возвращать [a, b]
,
Однако, в зависимости от заданного ввода, функция может создать несколько пар, что приведет к возврату функции [[a, b], [c, d], [e, f]]
, Вместо этого я бы хотел, чтобы он вернулся [a, b], [c, d], [e, f]
На данный момент я реализовал очень скудную функцию со множеством временных переменных и счетчиков и ищу более понятное предложение.
Ценю помощь!
6 ответов
Есть оператор yield, который идеально подходит для этого варианта использования.
def foo(a):
for b in a:
yield b
Это вернет генератор, который вы можете повторить.
print [b for b in foo([[a, b], [c, d], [e, f]])
Когда функция Python выполняется:
return a, b, c
что он на самом деле возвращает это кортеж (a, b, c)
, и кортежи распаковываются по назначению, так что вы можете сказать:
x, y, z = f()
и все хорошо. Так что если у вас есть список
mylist = [4, "g", [1, 7], 9]
Ваша функция может просто:
return tuple(mylist)
и ведите себя так, как вы ожидаете
num1, str1, lst1, num2 = f()
будет выполнять задания, как вы ожидаете.
Если вы действительно хотите, чтобы функция возвращала неопределенное количество вещей в виде последовательности, которую вы можете перебрать, то вы захотите сделать ее генератором, используя yield
, но это другой шарик воска.
Ответ очень прост: просто соедините элементы списка, указав необходимый разделитель.
Синтаксис метода соединения:
"separator".join(iterable)
Например, давайте рассмотрим функцию, в которой вам нужно вернуть все значения списка, разделенные запятой (,)
def fun(samp_list):
return ",".join(samp_list)
print(fun(["1","2","3"]))
И ответ следующим образом
1,2,3
Пример 2: возвращаемые значения списка, разделенные новой строкой
def fun(samp_list):
return "/n".join(samp_list)
print(fun(["1","2","3"]))
И вывод для этой функции выглядит следующим образом
1
2
3
Надеюсь, это полезно
Поддержите, проголосовав за!
return *(x for x in range(10)),
Таким образом, вы можете использовать синтаксис типа понимания списка, к которому вы привыкли, однако вы не создаете список. Вместо этого вы распаковываете (заметьте*
) генераторное выражение (обратите внимание()
вместо[]
) в кортеж (уведомление,
), который вы возвращаете.
Дополнительная информация: /questions/43298030/pochemu-v-python-net-ponimaniya-kortezhej/43298038#43298038
Однако, в зависимости от заданного ввода, функция может создавать несколько пар, что приведет к возвращению функции [[a, b], [c, d], [e, f]]. Вместо этого я хотел бы, чтобы он возвратил [a, b], [c, d], [e, f]
Можете ли вы не просто использовать возвращенный список (то есть список [[a, b], [c, d], [e, f]]) и извлечь из него элементы? Кажется, чтобы соответствовать вашим критериям произвольного числа / нескольких значений.
Проверьте этот вопрос: Как вернуть несколько значений из *args?
Важная идея заключается в том, что возвращаемые значения, если они являются контейнером, могут быть расширены до отдельных переменных.