Многомерные списки
Часто в задачах приходится хранить прямоугольные таблицы с данными. Такие таблицы называются матрицами или двумерными массивами. В языке программирования Питон таблицу можно представить в виде списка строк, каждый элемент которого является в свою очередь списком, например, чисел. Например, создать числовую таблицу из двух строк и трех столбцов можно так:
a = [[1, 2, 3], [4, 5, 6]]
Здесь первая строка списка a[0] является списком из чисел [1, 2, 3] . То есть a[0][0] == 1 , значение a[0][1] == 2 , a[0][2] == 3 , a[1][0] == 4 , a[1][1] == 5 , a[1][2] == 6 .
Для обработки и вывода списка как правило используется два вложенных цикла. Первый цикл по номеру строки, второй цикл по элементам внутри строки. Например, вывести двумерный числовой список на экран построчно, разделяя числа пробелами внутри одной строки, можно так:
for i in range(len(a)): for j in range(len(a[i])): print(a[i][j], end=' ') print()
То же самое, но циклы не по индексу, а по значениям списка:
for row in a: for elem in row: print(elem, end=' ') print()
Естественно для вывода одной строки можно воспользоваться методом join :
for row in a: print(' '.join(map(str, row)))
Используем два вложенных цикла для подсчета суммы всех чисел в списке:
s = 0 for i in range(len(a)): for j in range(len(a[i])): s += a[i][j]
Или то же самое с циклом не по индексу, а по значениям строк:
s = 0 for row in a: for elem in row: s += elem
Создание списка
Пусть даны два числа: количество строк n и количество столбцов m . Необходимо создать список размером n × m , заполненный нулями.
Очевидное решение оказывается неверным:
a = [[0] * m] * n
В этом легко убедиться, если присвоить элементу a[0][0] значение 1 , а потом вывести значение другого элемента a[1][0] — оно тоже будет равно 1! Дело в том, что [0] * m возвращает ccылку на список из m нулей. Но последующее повторение этого элемента создает список из n элементов, которые являются ссылкой на один и тот же список (точно так же, как выполнение операции b = a для списков не создает новый список), поэтому все строки результирующего списка на самом деле являются одной и той же строкой.
Таким образом, двумерный список нельзя создавать при помощи операции повторения одной строки. Что же делать?
Первый способ: сначала создадим список из n элементов (для начала просто из n нулей). Затем сделаем каждый элемент списка ссылкой на другой одномерный список из m элементов:
a = [0] * n for i in range(n): a[i] = [0] * m
Другой (но похожий) способ: создать пустой список, потом n раз добавить в него новый элемент, являющийся списком-строкой:
a = [] for i in range(n): a.append([0] * m)
Но еще проще воспользоваться генератором: создать список из n элементов, каждый из которых будет списком, состоящих из m нулей:
a = [[0] * m for i in range(n)]
В этом случае каждый элемент создается независимо от остальных (заново конструируется список [0] * m для заполнения очередного элемента списка), а не копируются ссылки на один и тот же список.
Ввод списка
Пусть программа получает на вход двумерный массив, в виде n строк, каждая из которых содержит m чисел, разделенных пробелами. Как их считать? Например, так:
a = [] for i in range(n): a.append(list(map(int, input().split())))
Или, без использования сложных вложенных вызовов функций:
a = [] for i in range(n): row = input().split() for i in range(len(row)): row[i] = int(row[i]) a.append(row)
Можно сделать то же самое и при помощи генератора:
a = [list(map(int, input().split())) for i in range(n)]
Сложный пример обработки массива
Пусть дан квадратный массив из n строк и n столбцов. Необходимо элементам, находящимся на главной диагонали, проходящей из левого верхнего угла в правый нижний (то есть тем элементам a[i][j] , для которых i == j ) присвоить значение 1 , элементам, находящимся выше главной диагонали – значение 0, элементам, находящимся ниже главной диагонали – значение 2. То есть получить такой массив (пример для n==4 ):
1 0 0 0 2 1 0 0 2 2 1 0 2 2 2 1
Рассмотрим несколько способов решения этой задачи. Элементы, которые лежат выше главной диагонали – это элементы a[i][j] , для которых i < j , а для элементов ниже главной диагонали i >j . Таким образом, мы можем сравнивать значения i и j и по ним определять значение a[i][j] . Получаем следующий алгоритм:
for i in range(n): for j in range(n): if i < j: a[i][j] = 0 elif i >j: a[i][j] = 2 else: a[i][j] = 1
Данный алгоритм плох, поскольку выполняет одну или две инструкции if для обработки каждого элемента. Если мы усложним алгоритм, то мы сможем обойтись вообще без условных инструкций.
Сначала заполним главную диагональ, для чего нам понадобится один цикл:
for i in range(n): a[i][i] = 1
Затем заполним значением 0 все элементы выше главной диагонали, для чего нам понадобится в каждой из строк с номером i присвоить значение элементам a[i][j] для j = i+1 , . n-1 . Здесь нам понадобятся вложенные циклы:
for i in range(n): for j in range(i + 1, n): a[i][j] = 0
Аналогично присваиваем значение 2 элементам a[i][j] для j = 0 , . i-1 :
for i in range(n): for j in range(0, i): a[i][j] = 2
Можно также внешние циклы объединить в один и получить еще одно, более компактное решение:
for i in range(n): for j in range(0, i): a[i][j] = 2 a[i][i] = 1 for j in range(i + 1, n): a[i][j] = 0
А вот такое решение использует операцию повторения списков для построения очередной строки списка. i -я строка списка состоит из i чисел 2 , затем идет одно число 1 , затем идет n-i-1 число 0 :
for i in range(n): a[i] = [2] * i + [1] + [0] * (n - i - 1)
А можно заменить цикл на генератор:
a = [[2] * i + [1] + [0] * (n - i - 1) for i in range(n)]
Форматирование вывода
В некоторых заданиях этого листка требуется выводить элементы списка аккуратными столбцами, выравнивая числа по правому краю с фиксированной шириной столбца. Это можно сделать разными способами, один из способов: использование метода rjust .
rjust — метод объекта типа str , принимающий два параметра: длину новой строки (ширина поля вывода) и символ-заполнитель: rjust(n, ch) . Например, s.rjust(10, ‘.’) . Метод возвращает новую строку, длина которой равна n символов, исходная строка находится в конце результата (то есть исходная строка “выравнивается” по правому краю), лишние позиции заполняются символом ch. Если опустить ch, то в качестве символа-заполнителя используется пробел. Если длина исходной строки была больше n, то возвращается исходная строка без изменений (строка не обрезается).
Аналогично есть методы ljust , выравнивающий строку по левому краю и center , выравнивающий строку по центру результата.
Как вывести list в строку python
Для вывода значений списка в строку, можно использовать распаковку:
names = ['John', 'Marry', 'Tom'] print(*names) # => John Marry Tom
При использовании этого способа тип элементов, которые содержит список, значения не имеет. В строку будет выведено всё содержимое списка:
nums = [1, 2, 3, 4] print(*nums) # => 1 2 3 4 l = [(1, 'tupple'), 'key':'value'>, True, 'str'] print(*l) # => (1, 'tupple') True str
Как вывести список без скобок в Python

Python — это высокоуровневый язык программирования, который часто используется для работы со списками. При выводе списков в Python по умолчанию скобки используются для обозначения списка. Однако иногда возникает необходимость вывода списка без скобок для различных целей. В этой статье мы рассмотрим несколько способов вывода списка без скобок в Python.
Использование функции join()
Функция join() в Python позволяет объединить элементы списка в строку, используя заданный разделитель. Мы можем использовать эту функцию, чтобы вывести элементы списка без скобок.
Принцип работы функции join() заключается в том, что она принимает в качестве аргумента разделитель (или строку-разделитель), а затем объединяет элементы списка в одну строку, вставляя указанный разделитель между ними.
Для вывода элементов списка без скобок и разделителя, мы можем использовать функцию join() с пустой строкой в качестве разделителя.
Вот пример использования функции join() :
my_list = ["apple", "banana", "cherry"] result = "".join(my_list) print(result)
Этот код выведет следующий результат:
applebananacherry
Как видим, все элементы списка были объединены в одну строку без использования скобок и разделителей. Если нам необходимо разделить элементы списка запятой, необходимо использовать соответствующий разделитель:
my_list = ["apple", "banana", "cherry"] result = ", ".join(my_list) print(result)
Этот код выведет следующий результат:
apple, banana, cherry
Использование функции print() вместе с оператором ‘ * ‘
Для вывода элементов списка без скобок можно использовать функцию print() вместе с оператором распаковки * .
Оператор * перед списком в функции print() позволяет передать каждый элемент списка в качестве отдельного аргумента функции. По умолчанию разделителем между элементами будет пробел. Если вам необходимо вывести все элементы из списка через запятую, вам необходимо указать соответствующий разделитель:
my_list = [1, 2, 3, 4, 5] print(*my_list, sep=', ')
В данном случае, оператор * передает элементы списка в функцию print() в качестве отдельных аргументов, а параметр sep=’, ‘ указывает разделитель.
В результате выполнения данного кода будет выведено:
1, 2, 3, 4, 5
Как в Python вывести список в столбик

Программирование часто требует отображения данных в удобном для чтения формате. Вывод списка в столбик является одним из таких случаев. В этой статье мы рассмотрим различные способы, которые позволяют вывести список в столбик в Python.
Использование цикла for для вывода списка в столбик
Использование цикла for — это один из самых простых способов вывода списка в столбик в Python. Для этого мы можем перебрать каждый элемент списка и вывести его на новой строке.
Для начала определим список, который мы будем выводить в столбик:
my_list = [1, 2, 3, 4, 5]
Затем мы можем использовать цикл for для перебора элементов списка и вывода каждого элемента на новой строке:
for item in my_list: print(item)
Это выведет следующий результат:
1 2 3 4 5
При необходимости мы можем использовать свой разделитель между каждым элементом. Для примера, мы хотим чтобы каждый элемент выводился с новой строки и после элемента была запятая:
my_list = [1, 2, 3, 4, 5] for item in my_list: print(item, end=',\n')
Это выведет следующий результат:
1, 2, 3, 4, 5,
Также мы можем использовать f-строки для более гибкого форматирования вывода. Для примера, мы хотим вывести каждый элемент в квадратных скобках с новой строки:
my_list = [1, 2, 3, 4, 5] for item in my_list: print(f"[]")
Это выведет следующий результат:
[1] [2] [3] [4] [5]
Использование цикла for является наиболее распространенным и простым способом вывода списка в столбик в Python.
Использование метода join() для вывода списка в столбик
Для вывода списка в столбик в Python можно использовать метод join() . Этот метод объединяет элементы списка в одну строку, разделяя их указанным разделителем. Мы можем использовать символ переноса строки ( \n ) в качестве разделителя, чтобы каждый элемент выводился на отдельной строке.
Пример использования метода join() для вывода списка в столбик:
my_list = ['apple', 'banana', 'orange'] print('\n'.join(my_list))
В этом примере мы объединяем элементы списка my_list с помощью метода join() , указывая символ переноса строки в качестве разделителя. Результатом будет вывод списка в столбик:
apple banana orange
Обратите внимание, что метод join() работает только со строками, поэтому если в списке есть элементы других типов, они должны быть преобразованы в строки перед использованием метода join() .
Использование функции print() вместе с оператором ‘ * ‘ для вывода списка в столбик
Использование оператора * вместе с функцией print() — это один из способов вывести список в столбик в Python. Оператор * распаковывает элементы списка, разделяя их пробелами, и передает их в качестве аргументов функции print() .
Простейшим примером использования оператора * вместе с print() для вывода списка в столбик будет следующий код:
list_name = ['item1', 'item2', 'item3'] print(*list_name, sep='\n')
В этом примере мы создали список list_name , содержащий три элемента, и использовали print() вместе с оператором * и аргументом sep=’\n’ , чтобы вывести каждый элемент списка в отдельной строке.
В результате мы получим вывод в таком виде:
item1 item2 item3