Как вернуть список в питоне
Большинство программ работает не с отдельными переменными, а с набором переменных. Например, программа может обрабатывать информацию об учащихся класса, считывая список учащихся с клавиатуры или из файла, при этом изменение количества учащихся в классе не должно требовать модификации исходного кода программы.
Раньше мы сталкивались с задачей обработки элементов последовательности, например, вычисляя наибольший элемент последовательности. Но при этом мы не сохраняли всю последовательность в памяти компьютера. Однако, во многих задачах нужно именно сохранять всю последовательность, например, если бы нам требовалось вывести все элементы последовательности в возрастающем порядке (“отсортировать последовательность”).
Для хранения таких данных можно использовать структуру данных, называемую в Питоне список (в большинстве же языков программирования используется другой термин “массив”). Список представляет собой последовательность элементов, пронумерованных от 0, как символы в строке. Список можно задать перечислением элементов списка в квадратных скобках, например, список можно задать так:
Primes = [2, 3, 5, 7, 11, 13] Rainbow = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet']
В списке Primes — 6 элементов, а именно: Primes[0] == 2 , Primes[1] == 3 , Primes[2] == 5 , Primes[3] == 7 , Primes[4] == 11 , Primes[5] == 13 . Список Rainbow состоит из 7 элементов, каждый из которых является строкой.
Также как и символы в строке, элементы списка можно индексировать отрицательными числами с конца, например, Primes[-1] == 13 , Primes[-6] == 2 .
Длину списка, то есть количество элементов в нем, можно узнать при помощи функции len , например, len(Primes) == 6 .
В отличие от строк, элементы списка можно изменять, присваивая им новые значения.
Rainbow = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet'] print(Rainbow[0]) Rainbow[0] = 'красный' print('Выведем радугу') for i in range(len(Rainbow)): print(Rainbow[i])
Рассмотрим несколько способов создания и считывания списков. Прежде всего, можно создать пустой список (не содержащий элементов, длины 0), а в конец списка можно добавлять элементы при помощи метода append . Например, пусть программа получает на вход количество элементов в списке n , а потом n элементов списка по одному в отдельной строке. Вот пример входных данных в таком формате:
5 1809 1854 1860 1891 1925
В этом случае организовать считывание списка можно так:
5 1809 1854 1860 1891 1925
a = [] # заводим пустой список n = int(input()) # считываем количество элемент в списке for i in range(n): new_element = int(input()) # считываем очередной элемент a.append(new_element) # добавляем его в список # последние две строки можно было заменить одной: # a.append(int(input())) print(a)
В этом примере создается пустой список, далее считывается количество элементов в списке, затем по одному считываются элементы списка и добавляются в его конец. То же самое можно записать, сэкономив переменную n :
5 1809 1854 1860 1891 1925
a = [] for i in range(int(input())): a.append(int(input())) print(a)
Для списков целиком определены следующие операции: конкатенация списков (сложение списков, т. е. приписывание к одному списку другого) и повторение списков (умножение списка на число). Например:
a = [1, 2, 3] b = [4, 5] c = a + b d = b * 3 print([7, 8] + [9]) print([0, 1] * 3)
В результате список c будет равен [1, 2, 3, 4, 5] , а список d будет равен [4, 5, 4, 5, 4, 5] . Это позволяет по-другому организовать процесс считывания списков: сначала считать размер списка и создать список из нужного числа элементов, затем организовать цикл по переменной i начиная с числа 0 и внутри цикла считывается i -й элемент списка:
5 1809 1854 1860 1891 1925
a = [0] * int(input()) for i in range(len(a)): a[i] = int(input())
Вывести элементы списка a можно одной инструкцией print(a) , при этом будут выведены квадратные скобки вокруг элементов списка и запятые между элементами списка. Такой вывод неудобен, чаще требуется просто вывести все элементы списка в одну строку или по одному элементу в строке. Приведем два примера, также отличающиеся организацией цикла:
a = [1, 2, 3, 4, 5] for i in range(len(a)): print(a[i])
Здесь в цикле меняется индекс элемента i , затем выводится элемент списка с индексом i .
a = [1, 2, 3, 4, 5] for elem in a: print(elem, end=' ')
В этом примере элементы списка выводятся в одну строку, разделенные пробелом, при этом в цикле меняется не индекс элемента списка, а само значение переменной (например, в цикле for elem in [‘red’, ‘green’, ‘blue’] переменная elem будет последовательно принимать значения ‘red’ , ‘green’ , ‘blue’ .
Обратите особое внимание на последний пример! Очень важная часть идеологии Питона — это цикл for , который предоставляет удобный способ перебрать все элементы некоторой последовательности. В этом отличие Питона от Паскаля, где вам обязательно надо перебирать именно индексы элементов, а не сами элементы.
Последовательностями в Питоне являются строки, списки, значения функции range() (это не списки), и ещё кое-какие другие объекты.
Приведем пример, демонстрирующий использование цикла for в ситуации, когда из строки надо выбрать все цифры и сложить их в массив как числа.
# дано: s = 'ab12c59p7dq' # надо: извлечь цифры в список digits, # чтобы стало так: # digits == [1, 2, 5, 9, 7] s = 'ab12c59p7dq' digits = [] for symbol in s: if '1234567890'.find(symbol) != -1: digits.append(int(symbol)) print(digits)
2. Методы split и join
Элементы списка могут вводиться по одному в строке, в этом случае строку целиком можно считать функцией input() . После этого можно использовать метод строки split() , возвращающий список строк, которые получатся, если исходную строку разрезать на части по пробелам. Пример:
1 2 3
# на вход подаётся строка # 1 2 3 s = input() # s == '1 2 3' a = s.split() # a == ['1', '2', '3']
Если при запуске этой программы ввести строку 1 2 3 , то список a будет равен [‘1’, ‘2’, ‘3’] . Обратите внимание, что список будет состоять из строк, а не из чисел. Если хочется получить список именно из чисел, то можно затем элементы списка по одному преобразовать в числа:
1 2 3
a = input().split() for i in range(len(a)): a[i] = int(a[i])
Используя специальную магию Питона — генераторы — то же самое можно сделать в одну строку:
1 2 3
a = [int(s) for s in input().split()]
Объяснение того, как работает этот код, будет дано в следующем разделе. Если нужно считать список действительных чисел, то нужно заменить тип int на тип float .
У метода split() есть необязательный параметр, который определяет, какая строка будет использоваться в качестве разделителя между элементами списка. Например, вызов метода split(‘.’) вернет список, полученный разрезанием исходной строки по символам ‘.’ :
a = '192.168.0.1'.split('.')
В Питоне можно вывести список строк при помощи однострочной команды. Для этого используется метод строки join . У этого метода один параметр: список строк. В результате возвращается строка, полученная соединением элементов переданного списка в одну строку, при этом между элементами списка вставляется разделитель, равный той строке, к которой применяется метод. Мы знаем, что вы не поняли предыдущее предложение с первого раза. Поэтому смотрите примеры:
a = ['red', 'green', 'blue'] print(' '.join(a)) # вернёт red green blue print(''.join(a)) # вернёт redgreenblue print('***'.join(a)) # вернёт red***green***blue
Если же список состоит из чисел, то придется использовать еще тёмную магию генераторов. Вывести элементы списка чисел, разделяя их пробелами, можно так:
a = [1, 2, 3] print(' '.join([str(i) for i in a])) # следующая строка, к сожалению, вызывает ошибку: # print(' '.join(a))
Впрочем, если вы не любитель тёмной магии, то вы можете достичь того же эффекта, используя цикл for .
3. Генераторы списков
Для создания списка, заполненного одинаковыми элементами, можно использовать оператор повторения списка, например:
n = 5 a = [0] * n
Для создания списков, заполненных по более сложным формулам можно использовать генераторы: выражения, позволяющие заполнить список некоторой формулой. Общий вид генератора следующий:
[выражение for переменная in последовательность]
где переменная — идентификатор некоторой переменной, последовательность — последовательность значений, который принимает данная переменная (это может быть список, строка или объект, полученный при помощи функции range ), выражение — некоторое выражение, как правило, зависящее от использованной в генераторе переменной, которым будут заполнены элементы списка.
Вот несколько примеров использования генераторов.
Создать список, состоящий из n нулей можно и при помощи генератора:
a = [0 for i in range(5)]
Создать список, заполненный квадратами целых чисел можно так:
n = 5 a = [i ** 2 for i in range(n)]
Если нужно заполнить список квадратами чисел от 1 до n , то можно изменить параметры функции range на range(1, n + 1) :
n = 5 a = [i ** 2 for i in range(1, n + 1)]
Вот так можно получить список, заполненный случайными числами от 1 до 9 (используя функцию randrange из модуля random ):
from random import randrange n = 10 a = [randrange(1, 10) for i in range(n)]
А в этом примере список будет состоять из строк, считанных со стандартного ввода: сначала нужно ввести число элементов списка (это значение будет использовано в качестве аргумента функции range ), потом — заданное количество строк:
5 a b 1 2 3
a = [input() for i in range(int(input()))]
4. Срезы
Со списками, так же как и со строками, можно делать срезы. А именно:
A[i:j] срез из j-i элементов A[i] , A[i+1] , . A[j-1] .
A[i:j:-1] срез из i-j элементов A[i] , A[i-1] , . A[j+1] (то есть меняется порядок элементов).
A[i:j:k] срез с шагом k : A[i] , A[i+k] , A[i+2*k] . . Если значение k
Каждое из чисел i или j может отсутствовать, что означает “начало строки” или “конец строки”
Списки, в отличии от строк, являются изменяемыми объектами: можно отдельному элементу списка присвоить новое значение. Но можно менять и целиком срезы. Например:
A = [1, 2, 3, 4, 5] A[2:4] = [7, 8, 9]
Получится список, у которого вместо двух элементов среза A[2:4] вставлен новый список уже из трех элементов. Теперь список стал равен [1, 2, 7, 8, 9, 5] .
A = [1, 2, 3, 4, 5, 6, 7] A[::-2] = [10, 20, 30, 40]
Получится список [40, 2, 30, 4, 20, 6, 10] . Здесь A[::-2] — это список из элементов A[-1] , A[-3] , A[-5] , A[-7] , которым присваиваются значения 10, 20, 30, 40 соответственно.
Если не непрерывному срезу (то есть срезу с шагом k , отличному от 1), присвоить новое значение, то количество элементов в старом и новом срезе обязательно должно совпадать, в противном случае произойдет ошибка ValueError .
Обратите внимание, A[i] — это элемент списка, а не срез!
Операции со списками
Со списками можно легко делать много разных операций.
| x in A | Проверить, содержится ли элемент в списке. Возвращает True или False |
| x not in A | То же самое, что not(x in A) |
| min(A) | Наименьший элемент списка |
| max(A) | Наибольший элемент списка |
| A.index(x) | Индекс первого вхождения элемента x в список, при его отсутствии генерирует исключение ValueError |
| A.count(x) | Количество вхождений элемента x в список |
Вернуть отдельный элемент списка в функции

В общем решал я значит задачи и наткнулся на довольно интересный случай:
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 и.
Как вернуть сразу несколько значений из функции в Python 3
Сегодня мы делимся с вами переводом статьи, которую нашли на сайте medium.com. Автор, Vivek Coder, рассказывает о способах возврата значений из функции в Python и объясняет, как можно отличить друг от друга разные структуры данных.

Фото с сайта Unsplash. Автор: Vipul Jha
Python удобен в том числе тем, что позволяет одновременно возвращать из функции сразу несколько значений. Для этого нужно воспользоваться оператором return и вернуть структуру данных с несколькими значениями — например, список общего количества рабочих часов за каждую неделю.
def hours_to_write(happy_hours): week1 = happy_hours + 2 week2 = happy_hours + 4 week3 = happy_hours + 6 return [week1, week2, week3] print(hours_to_write(4)) # [6, 8, 10]
Структуры данных в Python используются для хранения коллекций данных, которые могут быть возвращены посредством оператора return . В этой статье мы рассмотрим способы возврата нескольких значений с помощью подобных структур (словарей, списков и кортежей), а также с помощью классов и классов данных (Python 3.7+).
Способ 1: возврат значений с помощью словарей
Словари содержат комбинации элементов, которые представляют собой пары «ключ — значение» ( key:value ), заключенные в фигурные скобки ( <> ).
Словари, на мой взгляд, это оптимальный вариант для работы, если вы знаете ключ для доступа к значениям. Далее представлен словарь, где ключом является имя человека, а соответствующим значением — возраст.
people=
А теперь перейдем к функции, которая возвращает словарь с парами «ключ — значение».
# A Python program to return multiple values using dictionary # This function returns a dictionary def people_age(): d = dict(); d['Jack'] = 30 d['Kim'] = 28 d['Bob'] = 27 return d d = people_age() print(d) #
Способ 2: возврат значений с помощью списков
Списки похожи на массивы, сформированные с использованием квадратных скобок, однако они могут содержать элементы разных типов. Списки также отличаются от кортежей, поскольку являются изменяемым типом данных. То есть любой список может меняться.
Списки — одна из наиболее универсальных структур данных в Python, потому что им не обязательно сохранять однородность (в них можно включать строки, числа и элементы). Иногда списки даже используют вместе со стеками или очередями.
# A Python program to return multiple values using list def test(): str1 = "Happy" str2 = "Coding" return [str1, str2]; list = test() print(list) # ['Happy', 'Coding']
Вот пример, где возвращается список с натуральными числами.
def natural_numbers(numbers = []): for i in range(1, 16): numbers.append(i) return numbers print(natural_numbers()) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
Способ 3: возврат значений с помощью кортежей
Кортежи — это упорядоченные неизменяемые объекты в Python, которые обычно используются для хранения коллекций неоднородных данных.
Кортежи напоминают списки, однако их нельзя изменить после того, как они были объявлены. А еще, как правило, кортежи быстрее в работе, чем списки. Кортеж можно создать, отделив элементы запятыми: x, y, z или (x, y, z) .
На этом примере кортеж используется для хранения данных о сотруднике (имя, опыт работы в годах и название компании).
Bob = ("Bob", 7, "Google")
А вот пример написания функции для возврата кортежа.
# A Python program to return multiple values using tuple # This function returns a tuple def fun(): str1 = "Happy" str2 = "Coding" return str1, str2; # we could also write (str1, str2) str1, str2= fun() print(str1) print(str2) # Happy Coding
Обратите внимание: мы опустили круглые скобки в операторе return , поскольку для возврата кортежа достаточно просто отделить каждый элемент запятой (как показано выше).
Не забывайте, что кортеж можно создать с помощью запятой вместо круглых скобок. Круглые скобки требуются только в тех случаях, когда используются пустые кортежи или вам нужно избежать синтаксической неточности.
Чтобы лучше разобраться в кортежах, обратитесь к официальной документации Python 3 (документация приведена на английском языке. — Прим. ред.).
Ниже показан пример функции, которая использует для возврата кортежа круглые скобки.
def student(name, class): return (name, class) print(student("Brayan", 10)) # ('Brayan', 10)
Повторюсь, кортежи легко перепутать со списками (в конце концов, и те, и другие представляют собой контейнер, состоящий из элементов). Однако нужно помнить о фундаментальном различии: кортежи изменить нельзя, а списки — можно.
Способ 4: возврат значений с помощью объектов
Тут все так же, как в C/C++ или в Java. Можно просто сформировать класс (в C он называется структурой) для сохранения нескольких признаков и возврата объекта класса.
# A Python program to return multiple values using class class Intro: def __init__(self): self.str1 = "hello" self.str2 = "world" # This function returns an object of Intro def message(): return Intro() x = message() print(x.str1) print(x.str2) # hello world
Способ 5: возврат значений с помощью классов данных (Python 3.7+)
Классы данных в Python 3.7+ как раз помогают вернуть класс с автоматически добавленными уникальными методами, модулем typing и другими полезными инструментами.
from dataclasses import dataclass @dataclass class Item_list: name: str perunit_cost: float quantity_available: int = 0 def total_cost(self) -> float: return self.perunit_cost * self.quantity_available book = Item_list("better programming.", 50, 2) x = book.total_cost() print(x) print(book) # 100 Item_list(name='better programming.', perunit_cost=50, quantity_available=2)
Чтобы лучше разобраться в классах данных, обратитесь к официальной документации Python 3 (документация приведена на английском языке. — Прим. ред.).
Вывод
Цель этой статьи — ознакомить вас со способами возврата нескольких значений из функции в Python. И, как вы видите, этих способов действительно много.
Учите матчасть и постоянно развивайте свои навыки программирования. Спасибо за внимание!
- python 3
- python
- программирование для начинающих
- программирование
- функции
- data science
- Блог компании Plarium
- Python
- Программирование
Возврат нескольких значений из функции
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:
В примере выше «Бостон» — ключ, а «США» — значение.
Мы проделали долгий путь… Подытожим — вы можете вернуть несколько значений из функции и существует несколько способов сделать это.