Python3: Как из функции вывести список?
Я новичок и только разбираюсь, не могу сообразить как сделать вывод списка из функции. Есть большой вывод json, в котором есть список:
dataorg = , , ]>
- Переработка и консервирование мяса;
- Производство и консервирование мяса птицы;
- Производство мясных (мясосодержащих) консервов;
def okve(): for i in range (0, len(dataorg)): ok = '- ' + dataorg['ДопВидДеят'][i]['Текст'] + ';' return(ok) print(okve())
Но мне возвращается только:
- Переработка и консервирование мяса;
При этом вывод из функции мне нужен для использования в другой функции. Подскажите, какие есть варианты решения?
Отслеживать
47.5k 17 17 золотых знаков 56 56 серебряных знаков 99 99 бронзовых знаков
задан 17 июн 2020 в 20:25
Артём Лебедев Артём Лебедев
25 5 5 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
return возвращает только то что в него передали, и завершает работу функции.
Нужно либо аккумулировать список внутри функции и вернуть полный список в конце:
def okve(): ok = [] for i in range (0, len(dataorg['ДопВидДеят'])): ok.append('- ' + dataorg['ДопВидДеят'][i]['Текст'] + ';') return ok print(okve())
Либо возвращать значения последовательно с помощью yield , превратив тем самым функцию в генератор (но чтобы получить список, нужно будет обернуть вызов функции в list ):
def okve(): for i in range (0, len(dataorg['ДопВидДеят'])): ok = '- ' + dataorg['ДопВидДеят'][i]['Текст'] + ';' yield ok print(list(okve()))
Если нужно вывести не в виде списка (в квадратных скобках), а каждый элемент с новой строки, то можно объединить результат в цельную строку с помощью join :
print('\n'.join(okve()))
print(*okve(), sep='\n')
Вообще, если вам нужно перебрать элементы списка, то range не нужно:
def okve(): ok = [] for item in dataorg['ДопВидДеят']: ok.append('- ' + item['Текст'] + ';') return ok
def okve(): for item in dataorg['ДопВидДеят']: ok = '- ' + item['Текст'] + ';' yield ok
Вернуть отдельный элемент списка в функции
В общем решал я значит задачи и наткнулся на довольно интересный случай:
1 2 3 4 5 6 7 8 9 10
def num_to_words(n): a = ['text'] b = ['text'] if n 20: return a[n] else: c = b[n // 10] b = a[n % 10] return c, b # print(num_to_words)
Если возвращать элементы через запятую, то они будут возвращаться в скобках то бишь (‘c’, ‘b’)
Но в задаче нужно было возвратить элемент иным способом, думал долго признаюсь и пришел к такой идее.
return c + ' ' + b
Возможно кому то будет полезно.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Вернуть первый и последний элемент заданного списка в виде двуэлементного списка
Дано список произвольной длинны .Написать предикат ,который возвращает первый и последний элемент.

Рекурсия: вернуть первый элемент, входящий в два произвольных списка
Предусмотреть определение рекурсивной функции по значению и по аргументу. Определить функцию.

Добавить элемент в конец уже существующего списка и вернуть его же
Добрый вечер. Есть список состоящий из буквенных символов. Обозначим его за X Допустим мы уже.
Как перенести структуру односвязного списка и его функции в отдельный файл?
Нужно перенести структуру односвязного списка(а также узла) и его функций в отдельные cpp и.
2421 / 1463 / 633
Регистрация: 01.11.2021
Сообщений: 2,266

Сообщение было отмечено Fazzzy как решение
Решение
Сообщение от Fazzzy 
Если возвращать элементы через запятую, то они будут возвращаться в скобках то бишь (‘c’, ‘b’)
Но в задаче нужно было возвратить элемент иным способом, думал долго признаюсь и пришел к такой идее.
Смотря что надо вернуть. Вернуть можно 1 элемент, если надо вернуть несколько значений, то их надо объединить в коллекцию и вернуть ее. Через запятую возвращается кортеж значений неявно.
Можно значения добавить в список или другую структуру и вернуть ее, так же объединить в строку.
Все зависит от того, что тебе надо получить и как дальше надо с этим работать.
Возврат нескольких значений из функции
Python позволяет вам возвращать из функции несколько значений.
Для этого необходимо вернуть структуру данных, содержащую эти несколько значений. Например, список количества миль, которые надо пробежать за неделю.
def miles_to_run(minimum_miles): week_1 = minimum_miles + 2 week_2 = minimum_miles + 4 week_3 = minimum_miles + 6 return [week_1, week_2, week_3] print(miles_to_run(2)) # result: [4, 6, 8]
Структура данных — контейнер, хранящий однотипные данные. Эти данные могут быть возвращены из функций. В этой статье мы узнаем, как возвращать несколько значений из структур вроде кортежа, списка и словаря.
Кортежи
Кортеж — упорядоченная, неизменяемая последовательность. То есть, значения внутри кортежа мы изменять не можем.
Мы можем использовать кортеж, например, для хранения информации о человеке (о его имени, возрасте, месте жительства).
nancy = ("Нэнси", 55, "Чикаго")
Пример функции, которая возвращает кортеж:
def person(): return "Боб", 32, "Бостон" print(person()) # result: ('Боб', 32, 'Бостон')
Заметьте, что в предложении return мы не использовали круглые скобки для возврата значения. Это потому, что кортеж можно вернуть, просто отделив каждый элемент запятой, как в нашем примере.
«Кортеж образуют запятые, а не круглые скобки» — так написано в документации. Но для создания пустых кортежей круглые скобки необходимы. Также это помогает избежать путаницы.
Пример функции, которая использует () для возврата кортежа:
def person(name, age): return (name, age) print(person("Генри", 5)) #result: ('Генри', 5)
Список
Список — упорядоченная, изменяемая последовательность. Элементы списка можно изменять.
Список с городами:
cities = ["Бостон", "Чикаго", "Джексонвилл"]
test_scores = [55, 99, 100, 68, 85, 78]
Взгляните на функцию ниже. Она возвращает список, содержащий десять чисел.
def ten_numbers(): numbers = [] for i in range(1, 11): numbers.append(i) return numbers print(ten_numbers()) #result: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Еще один пример. В этот раз мы передаем несколько аргументов в функцию.
def miles_ran(week_1, week_2, week_3, week_4): return [week_1, week_2, week_3, week_4] monthly_mileage = miles_ran(25, 30, 28, 40) print(monthly_mileage) #result: [25, 30, 28, 40]
Спутать кортеж со списком довольно просто. Все-таки обе структуры хранят несколько значений. Важно запомнить ключевые отличия:
- Кортежи изменять нельзя.
- Списки изменять можно.
Словари
Словарь — структура, в которой хранятся пары значений в виде «ключ-значение». Заключены эти значения в фигурные скобки <> . Каждому ключу соответствует свое значение.
Рассмотрим пример. В следующем словаре содержатся имена сотрудников. Имя сотрудника — ключ, его должность — значение.
employees =
Пример функции, возвращающей словарь в виде «ключ-значение».
def city_country(city, country): location = <> location[city] = country return location favorite_location = city_country(«Бостон», «США») print(favorite_location) # result:
В примере выше «Бостон» — ключ, а «США» — значение.
Мы проделали долгий путь… Подытожим — вы можете вернуть несколько значений из функции и существует несколько способов сделать это.
Возврат нескольких значений из функции в Python
В этом посте мы обсудим, как вернуть несколько значений из функции в Python.
1. Использование кортежей
Наиболее распространенный подход к возврату нескольких значений из функции в Python — использование кортежа. Идея состоит в том, чтобы упаковать возвращаемые значения в кортеж, вернуть кортеж из функции и распаковать его внутри вызывающей функции.
Это предпочтительный подход, когда вам нужно вернуть только два или три поля из функции. В следующем примере показано, как можно использовать кортежи для возврата двух полей разных типов из функции.
return ‘A’ , 65
if __name__ == ‘__main__’ :
print ( ( x , type ( x ) ) ) # (‘A’,
print ( ( y , type ( y ) ) ) # (65,
Главное преимущество кортежей в том, что их очень легко создавать и распаковывать. Кортежи отлично работают, когда общее количество возвращаемых значений меньше. Однако это легко становится проблематичным, когда общее количество возвращаемых значений увеличивается. Чем больше значений, тем сложнее ими управлять и правильно распаковывать.
2. Использование именованных кортежей
Чтобы справиться с проблемами, связанными с кортежем, вы можете использовать именованные кортежи, которые представляют собой объекты, подобные кортежу, но имеющие поля, доступные при поиске по атрибуту. В следующем примере кода показано, как реализовать именованные кортежи: