А вы знаете, что вывести на экран список в 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, на Talanto.work сейчас есть варианты для junior, middle, senior…
Рынок Python-вакансий большой, но удобным его назвать сложно. Формально вакансий много, однако в реальном поиске…
Срезы в Python — это больше, чем a[2:7]. В статье — быстрый разбор полезных приёмов:…
В этой статье мы рассмотрим возведение в степень в Python с помощью различных методов, от…
Дубликаты в списке Python — частая проблема. В статье показано, как быстро убрать повторы, в…
Услуга виртуального хостинга на SpaceWeb позволяет арендовать часть сервера (shared-сервера) и разместить на нём свой…