Как красиво вывести список python
Перейти к содержимому

Как красиво вывести список python

  • автор:

Функции, методы а также некоторые приемы работы со списками в Python

a[0] – взять первое значение списка (‘red’)
a[1] – взять второе значение списка (‘blue’)
a[-1] – взять последнее значение (‘white’)
a[-2] — взять предпоследнее значение (‘black’)
a.pop(0) – удалить первый элемент списка
a.pop() – удалить последний элемент списка
a.pop(3) – удалить элемент с номером 3 (‘green’)s
a = a[2:] — взять часть списка, от ‘yellow’ и до конца
a = a[:2] – взять часть списка, от начала и до ‘blue’ включительно
a = a[2:5] – взять часть списка ‘yellow’,’green’,’black’
a = a[1:] – удалить первый
a = a[:-1] – удалить последний
a = a[:-3] – удалить последние три
a = a[::-1] – перевернуть список
a.reverse() – перевернуть список
a = a[::] — без изменений: копия списка
a = a[::2] — взять часть списка: элементы, стоящие на четных местах (0 тоже входит)
a = a[1::2] — взять часть списка: элементы, стоящие на нечетных местах
len(a) – получить длину списка (количество всех элементов)
sum(a) – получить сумму элементов списка (только для списков, содержащих числа)
if ‘brown’ in a : — проверить, входит ли элемент в список
a.index[0] – возвращает номер элемента, равного нулю. Если такого нет, то возникает ошибка
a.count(0) – возвращает количество элементов, равных нулю
a = a.sort() – возвращает сортированный список
a = a.sort(reverse=1) – возвращает сортированный список по убыванию

a = [0 for x in range(12)] – создать список из 12-ти элементов, равных нулю
a = [0]*12 – тоже, что и выше
a = [x for x in range(12)] – создать список, содержащий 12 элементов: 1,2,3, … 11
a = [x for x in range(12) if x % 2 == 0] – создать список из четных значений от 0 до 11
a = [x for x in a if x % 2 == 0] – оставить в списке только четные элементы
a = [x for x in a if x != 0] – удалить все нули
a = [abs(x) for x in a] – все значения списка сделать положительными

Перебор по значениям.

for x in a: print (x)

Вывести все значения списка.

Перебор по номерам.

for i in range(len(a)): a[i] += 10 print (a[i])

Увеличить значения списка и вывести на экран (в консоль)

Обратите внимание! Если элементы списка «простого типа» (строка или число), то их можно изменить только перебирая по значениям. Если же элементы списка — другие списки или объекты, то изменять можно в обоих случаях. Рассмотрим подробнее:

a = [1,2,3,4] for x in a: x += 10 print(x)

На экране будут числа 11, 12, 13, 14, однако сам список не изменится.

a = [1,2,3,4] for x in range(len(a)): a[x] += 10 print(a[x])

В этом случае изменения сохранятся.

class ball(): x = 10 y = 20 r = 10 a = [ball() for x in range(12)] for ball in a: ball.r += 10

В этом случае изменения будут сохранены в списке и нет необходимости в переборе по номерам.

print(a)

Вывести все значения списка

print( ' '.join(map(str,a)))

Вывести все значения списка как одну строку, без запятых

a = [10/3,10/6,20/6,20/3,1/3] for x in a: print('%6.1f' % x, end = '') print() print (a)

Красиво вывести список, состоящий из дробных значений. Последняя строка дана для сравнения.

Related Posts

  • 33. Решаем проблемы с двумерным списком
  • 32. Неразрешимые трудности, дублирование информации, проблема
  • Выделение объектов
  • Форматированный вывод
  • 31. Двумерные списки (массивы, матрицы) в Python

Пишем красивый идиоматический Python

Иногда сложно найти в Сети правильные, а главное актуальные «best practices» для языка. Документация, конечно же, содержит всю необходимую информацию, но отсеять нужную вещь в абзацах подробного (на то она и документация) описания довольно сложно. Но недавно мне улыбнулся поиск Google, и я наткнулся на очень полезные «паттерны» языка Python от одного из core разработчиков — Raymond Hettinger.

Примечание: Все рекомендации даны в нескольких вариантах: сначала идут самые «плохие» варианты, а дальше предлагается лучшая альтернатива. Актуально для версии языка 2.7, отличия для версии 3.3 читайте в примечаниях к конкретному «паттерну».

Цикл по массиву из чисел

Плохо: иногда пишут так.

for i in [0, 1, 2, 3, 4, 5]: print i**2 

Хорошо: лучший, с генератором. Но в 32 битной системе список из миллиона чисел будет занимать ~ 32 mb памяти.

for i in range(6): print i**2 

Отлично: самый лучший вариант. В отличии от второго xrange возвращает только одно значение за раз, и не нужно лишнюю память для хранения всего массива.

for i in xrange(6): print i**2 

Примечание: В версии Python 3.3 xrange уже в ядре и называеться просто range .

Цикл по списку

Плохо: часто бывшие С программисты пишут так.

colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)): print colors[i] 

Хорошо: лучший вариант.

colors = ['red', 'green', 'blue', 'yellow'] for color in colors: print color 

Но если нужно пройти по списку задом на перед?

Плохо: опять, прошло из C дает о себе знать:

colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)-1, -1, -1): print colors[i] 

Хорошо: но в Python пишут вот так:

colors = ['red', 'green', 'blue', 'yellow'] for color in reversed(colors): print color 
Цикл по списку с индексами

Плохо тоже что и выше.

colors = ['red', 'green', 'blue', 'yellow'] for i in range(len(colors)): print i, '-->', colors[i] 

Хорошо: более элегантный вариант:

colors = ['red', 'green', 'blue', 'yellow'] for i, color in enumerate(colors): print i, '-->', color 
Цикл по двум спискам

Плохо тоже что и выше.

names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue', 'yellow'] n = min(len(names), len(colors)) for i in range(n): print names[i], '-->', colors[i] 

Хорошо: с двух списков делаем один список кортежей. Проблема в том что zip использует больше памяти чем первый вариант.

names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue', 'yellow'] for name, color in zip(names, colors): print name, '-->', color 

Отлично: в отличии от zip , izip использует кэширование, что помогает существенно сэкономить память.

names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue', 'yellow'] for name, color in izip(names, colors): print name, '-->', color 

Примечание: В версии Python 3.3 izip вписан в ядро и называется просто zip .

Сортировка списка по алгоритму

Плохо: используя функцию для сравнения.

colors = ['red', 'green', 'blue', 'yellow'] def compare_length(c1, c2): if len(c1) < len(c2): return -1 if len(c1) >len(c2): return 1 return 0 print sorted(colors, cmp=compare_length) 

Хорошо: используя сортировку по ключу. Использует намного меньше памяти.

colors = ['red', 'green', 'blue', 'yellow'] print sorted(colors, key=len) 

Примечание: Метод cmp убран с ядра Python 3.x.

Цикл по ключам словаря

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

for k in d: print k 

Для изменения словаря в цикле используйте цикл по ключам (Пример: удаление всех ключей начинающихся с R ):

for k in d.keys(): if k.startswith('R'): del d[k] 

В этом случае d.keys() делает копию ключей словаря, что позволяет нам свободно работать с оригинальной структурой.

Цикл по ключам и значением словаря

Плохо: цикл по ключам и возвращение значение по последним. Медленный способ:

for k in d: print k, '-->', d[k] 

Хорошо: быстрее делать цикл по значениях:

for k, v in d.items(): print k, '-->', v 

Отлично: Но самый лучший и быстрый способ это использовать итератор:

for k, v in d.iteritems(): print k, '-->', v 
Соединение двух списков в один словарь

Очень быстрый метод, используется только один кортеж для генерации словаря.

names = ['raymond', 'rachel', 'matthew'] colors = ['red', 'green', 'blue'] d = dict(izip(names, colors)) # d будет иметь следующее значение: #
Подсчет элементов в словаре

Плохо: обычный способ:

colors = ['red', 'green', 'red', 'blue', 'green', 'red'] d = <> for color in colors: if color not in d: d[color] = 0 d[color] += 1 #

Хорошо: использует функцию get() :

colors = ['red', 'green', 'red', 'blue', 'green', 'red'] d = <> for color in colors: d[color] = d.get(color, 0) + 1 

Отлично: самый продвинутый способ это использовать defaultdict() . Но вы должны знать как он работает.

d = defaultdict(int) for color in colors: d[color] += 1 
Группирование элементов списка

Плохо: если нужно сгруппировать элементы списка по некоторому признаку (в примере — длина строки) часто используют такой метод:

names = ['raymond', 'rachel', 'matthew', 'roger', 'betty', 'melissa', 'judith', 'charlie'] d = <> for name in names: key = len(name) if key not in d: d[key] = [] d[key].append(name)

Хорошо: но есть способ гораздо элегантней и быстрее:

d = defaultdict(list) for name in names: key = len(name) d[key].append(name) 
Итог

На сегодня все. Надеюсь эти тривиальные, но полезные примеры помогут кому-то улучшить свой код, как они помогли это сделать мне. Их автором является Raymond Hettinger (@raymondh), Python Core Developer.

UPD: Видео доклада на PyCon 2013, с которого были взяты примеры кода: http://youtu.be/OSGv2VnC0go (на английском), содержит еще очень много интересной информации не перенесенной в статью, а также юмор и харизму докладчика.

  • python 2.7
  • best practices

Как красиво выводить вложенные словари в Python

В Python словари являются мощным и полезным инструментом для хранения и обработки данных. Однако, при работе с большими и вложенными словарями, их вывод на экран может стать сложным и нечитаемым. Вложенные словари — это словари, в которых значения могут быть другими словарями. Например, так выглядит вложенный словарь:

my_dict = < "key1": < "key2": < "key3": "value1" >, "key4": "value2" >, "key5": "value3" >

Если просто вывести его на экран с помощью print , то получится нечитаемая «каша» из скобок и запятых. Но есть способ сделать вывод более наглядным и понятным.

Библиотека pprint в Python предоставляет функцию pprint() , которая выводит данные в «красивом» (pretty) формате. Она автоматически добавляет отступы и переносы строк, где это необходимо, чтобы сделать вывод более читаемым.

import pprint pp = pprint.PrettyPrinter(indent=4) pp.pprint(my_dict)

В данном примере, indent=4 указывает, что каждый уровень вложенности должен отделяться отступом в 4 пробела. Вы можете изменить это значение на любое другое в зависимости от ваших предпочтений.

Вывод будет выглядеть так:

< 'key1': < 'key2': < 'key3': 'value1' >, 'key4': 'value2' >, 'key5': 'value3' >

Как видно, теперь структура словаря намного более наглядна и понятна.

Таким образом, с помощью pprint() можно красиво и наглядно выводить на экран даже самые сложные и вложенные словари.

Как вывести матрицу красиво?

Всем привет, помогите пожалуйста, как вывести матрицу в питоне красиво, без скобок, чтобы все элементы были друг под другом в виде столбцов?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Числовой прямоугольник, как вывести красиво?
Числовой прямоугольник Напишите программу, которая строит числовой прямоугольник требуемого.

Красиво вывести json файл в терминал
Привет! У меня есть задача надо красиво вывести json файл в терминал на Python. Но при это не.

Как красиво вывести таблицу, ровно по полям?
Я вот стащил из PG бд табличку и хочу её красиво вывести. Таблица будет представлена в питоне как.

Красиво вывести матрицу
Есть матрица 5 на 5, вывожу её таким образом, используя переменную count const int size = 5; .

Красиво вывести матрицу
Всем привет,я читал,как вывести типа того матрицу в Label .

Регистрация: 14.12.2019
Сообщений: 73
nikitalystsev,

1 2 3 4 5
#adjacency_matrix - ваша матрица for i in range(len(adjacency_matrix)): for j in range(len(adjacency_matrix[i])): print(adjacency_matrix[i][j], end=' ') print()

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

16120 / 9755 / 2731
Регистрация: 21.10.2017
Сообщений: 21,624

print('\n'.join('\t'.join(map(str, row)) for row in matrix))

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *