Функции, методы а также некоторые приемы работы со списками в 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!
![]()
![]()
16120 / 9755 / 2731
Регистрация: 21.10.2017
Сообщений: 21,624
print('\n'.join('\t'.join(map(str, row)) for row in matrix))