Возврат каждого элемента из списка (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?

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

Другие вопросы по тегам