А вы знаете, что вывести на экран список в Python можно несколькими способами? В этой статье мы разберем несколько приемов распечатки списка.
Друзья, подписывайтесь на наш телеграм канал Pythonist. Там еще больше туториалов, задач и книг по Python.
Чтобы распечатать список список с использованием оператора *
, нужно использовать функцию print()
следующим образом:
print(*list_name)
Элементы будут выведены через пробел, как при использовании print()
с несколькими аргументами. Например:
pokemon_list = ['Pikachu', 'Abra', 'Charmander'] print(*pokemon_list) # Результат: # Pikachu Abra Charmander
Оператор *
также можно использовать для распаковки списка при вызове функции, принимающей несколько аргументов:
def print_pokemon(pokemon1, pokemon2, pokemon3): print(pokemon1) print(pokemon2) print(pokemon3) print_pokemon(*pokemon_list)
Вывод:
Pikachu Abra Charmander
Чтобы вывести список с определенными разделителями, можно использовать представление списка внутри функции print()
:
print(*[item + '\n' for item in pokemon_list])
Символ новой строки \n
, добавленный после каждого элемента, гарантирует, что каждый элемент будет выведен на отдельной строке:
Pikachu Abra Charmander
Помните, что в качестве разделителя можно использовать любую строку. Например, чтобы элементы списка отделялись друг от друга запятой и пробелом, можно использовать следующий синтаксис:
print(*[item + ', ' for item in pokemon_list]) # Результат: # Pikachu, Abra, Charmander,
Обратите внимание, что за последним элементом тоже будут идти запятая и пробел, а вам этого может и не хотеться.
Чтобы избежать этой ловушки, можно использовать выражение if
внутри представления списка. Таким образом можно указать добавлять разделитель после всех элементов, кроме последнего. Вот как это выглядит:
print(*[item + (', ' if i < len(pokemon_list)-1 else '') for i, item in enumerate(pokemon_list)]) # Результат: # Pikachu, Abra, Charmander
Чтобы вывести список с разделителями, но без разделителя в конце, также можно использовать функцию print()
с именованным аргументом sep
. Элементы будут разделены запятой и пробелом:
print(*pokemon_list, sep=', ') # Результат: # Pikachu, Abra, Charmander
Обратите внимание, что print()
автоматически добавляет пробел после каждого элемента, так что его можно не включать в строку разделителя.
Как уже упоминалось, разделителем может быть любая строка, например, дефис:
print(*pokemon_list, sep='-') # Результат: # Pikachu-Abra-Charmander
Помните, что именованный аргумент sep определяет только разделитель между элементами, но не за последним элементом.
Предположим, вы хотите подавить автоматическое добавление пробела после конечного элемента. В этом случае можно использовать именованный аргумент end
и задать другую строку, которую следует вывести вместо конечного пробела:
print(*pokemon_list, sep=', ', end='') # Результат: # Pikachu, Abra, Charmander
Чтобы вывести список с использованием метода join()
, нужно применить следующий синтаксис:
print(separator.join(list_name))
Элементы списка будут объединены в одну строку со строкой-разделителем между ними (separator
). Например, чтобы вывести список покемонов через запятую и пробел, можно написать такой код:
print(', '.join(pokemon_list)) # Результат: # Pikachu, Abra, Charmander
Если хотите добавить строку до или после списка, можно воспользоваться оператором +
для конкатенации строк:
print('Pokemons: ' + ', '.join(pokemon_list)) # Результат: # Pokemons: Pikachu, Abra, Charmander
Можно сперва преобразовать список в строку, а затем вывести его. Для конвертации используется функция str()
:
print(str(pokemon_list))
Список будет выведен как строка, элементы будут заключены в квадратные скобки и разделены запятыми:
['Pikachu', 'Abra', 'Charmander']
Для распечатки списка с индексами элементов можно воспользоваться функцией enumerate()
и циклом for
:
for i, pokemon in enumerate(pokemon_list): print(i, pokemon)
Результат:
0 Pikachu 1 Abra 2 Charmander
От редакции Pythonist: подробнее об enumerate()
читайте в статье «Как работает функция enumerate() в Python?».
Функция enumerate()
возвращает итератор, который производит кортежи, содержащие индекс и значение каждого элемента списка. При помощи цикла for
можно перебрать эти кортежи и вывести индексы со значениями.
Используя вариацию одного из уже рассмотренных способов вывода списка, мы можем настроить вывод индексов и значений. Например:
for i, pokemon in enumerate(pokemon_list): print('{}: {}'.format(i, pokemon))
Результат:
0: Pikachu 1: Abra 2: Charmander
Также можно использовать представление списка для создания нового списка строк с отформатированными индексами и значениями всех элементов, а затем применить print()
для вывода:
result = ['{}: {}'.format(i, pokemon) for i, pokemon in enumerate(pokemon_list)] print(result) # Результат: # ['0: Pikachu', '1: Abra', '2: Charmander']
Помните, что функция enumerate()
возвращает индекс каждого элемента, начиная с 0. Если вы хотите, чтобы индексация начиналась с другого числа, вы можете передать его функции в качестве аргумента. Например:
for i, pokemon in enumerate(pokemon_list, 1): print('{}: {}'.format(i, pokemon))
Результат:
1: Pikachu 2: Abra 3: Charmander
Чтобы вывести два списка таким образом, чтобы их элементы выстроились попарно, нужно проитерировать оба списка в одном цикле. Для этого можно использовать цикл for
и функцию zip()
.
От редакции Pythonist: о функции zip()
предлагаем почитать в статье «Используем zip() для парной итерации».
Функция zip()
возвращает итератор. Этот итератор производит кортежи из элементов, стоящих на одинаковых позициях в списках. Полученные кортежи можно перебрать в цикле и распечатать элементы.
Пример:
a = ['a1', 'a2', 'a3'] b = ['b1', 'b2', 'b3'] for x, y in zip(a, b): print(x, y)
Результат:
a1 b1 a2 b2 a3 b3
При помощи представления списка также можно создать новый список со спаренными элементами двух исходных, а затем вывести его:
a = ['a1', 'a2', 'a3'] b = ['b1', 'b2', 'b3'] result = [x + y for x, y in zip(a, b)] print(result) # Результат: # ['a1b1', 'a2b2', 'a3b3']
Важно помнить, что функция zip()
перебирает элементы списков только пока они не исчерпаются в самом коротком списке. Если ваши списки разной длины, не все элементы более длинного списка попадут в вывод. Например:
a = ['a1', 'a2', 'a3'] b = ['b1', 'b2'] for x, y in zip(a, b): print(x, y)
Результат:
a1 b1 a2 b2
Если вы хотите включить все элементы более длинного списка, можно вместо недостающих элементов более короткого списка использовать значения None. Для этого применяется функция itertools.zip_longest()
из модуля itertools. Например:
import itertools a = ['a1', 'a2', 'a3'] b = ['b1', 'b2'] for x, y in itertools.zip_longest(a, b): print(x, y)
Результат:
a1 b1 a2 b2 a3 None
Для вывода вложенного списка можно сначала перебрать в цикле элементы внешнего списка, а затем, в другом цикле, перебрать элементы внутреннего. Например:
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] for sublist in nested_list: for item in sublist: print(item)
Результат:
1 2 3 4 5 6 7 8 9
Списки также можно вывести на разных строках:
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] for sublist in nested_list: print(*sublist, sep=",")
Вывод:
1,2,3 4,5,6 7,8,9
Еще можно создать новый список из элементов вложенного при помощи list comprehension и вывести его при помощи print()
:
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] result = [item for sublist in nested_list for item in sublist] # Результат: # [1, 2, 3, 4, 5, 6, 7, 8, 9]
Еще можно использовать модуль pprint, который предоставляет функцию pprint()
для красивой распечатки списков и других структур данных:
import pprint pokemon_list = ['Pikachu', 'Abra', 'Charmander'] pprint.pprint(pokemon_list) # Результат: # ['Pikachu', 'Abra', 'Charmander']
Для вывода списка можно применить модуль json, в котором есть функция dumps()
. Она может конвертировать список в строку JSON:
import json pokemon_list = ['Pikachu', 'Abra', 'Charmander'] print(json.dumps(pokemon_list)) # Результат: # ["Pikachu", "Abra", "Charmander"]
И, наконец, можно использовать f-строки (доступно в Python 3.6 и более новых версиях). Этот функционал позволяет встраивать выражения в строковые литералы при помощи плейсхолдера {}
:
for pokemon in pokemon_list: print(f'{pokemon} is a pokemon')
Результат:
Pikachu is a pokemon Abra is a pokemon Charmander is a pokemon
От редакции Pythonist: об f-строках читайте в статье «Форматирование строк в Python: format() и f-строки».
Перевод статьи «Printing a List in Python – 10 Tips and Tricks».
Управление памятью - важный, но часто упускаемый из виду аспект программирования. При неправильном подходе оно…
Как возникает круговой импорт? Эта ошибка импорта обычно возникает, когда два или более модуля, зависящих…
Вы когда-нибудь оказывались в ситуации, когда скрипт на Python выполняется очень долго и вы задаетесь…
В этом руководстве мы разберем все, что нужно знать о символах перехода на новую строку…
Блок if __name__ == "__main__" в Python позволяет определить код, который будет выполняться только при…
Давайте разберем, как настроить модульные тесты для экземпляров классов. Мы напишем тесты для проверки функциональности…