Python Cheat Sheet
Содержание
Table of Contents
Основные операторы
>>> 3 / 2
1.5
>>> 3 // 2
1
>>> 3 ** 2
9
>>> abs(-1)
1
Основные структуры данных
List (Список)
- Сортированный
- Изменяемый
- Содержит дубликаты
>>> list = []
>>> list = [i:j] # возвращает часть списка
>>> list = [-1] # возвращает последний элемент
>>> list[i] = val
>>> list[i:j] = otherlist # замена с i-ого по j-ый element новым списком otherlist
>>> del list[i:j]
>>> list.append(item) # O(1) или O(n) в случае изменения размера
>>> list.extend(another_list) # O(1) или O(n) в случае изменения размера
>>> list.insert(index, item) # O(n)
>>> list.pop() # O(1) возвращает и удаляет последний элемент из списка
>>> list.pop(i) # O(n) возвращает и удаляет i-ый элемент из списка
>>> list.remove(value) # O(n) удаляет первый элемент из списка у которого значение value
>>> list1 + list2 # объединение 2-ух списков
>>> set(list) # удаление дубликатов из списка
>>> list.reverse() # разворачивает список на лету
>>> list.count(item)
>>> sum(list)
>>> zip(list1, list2) # возвращает список кортежей размера n где первый элемент в кортеже элеент из первого списка, а второй элемент из второго списка
>>> list.sort() # сортировка на лету, возвращает None
>>> sorted(list) # возвращает отсортированую копию списка
>>> ",".join(list) # возвращает строку где элементы списка разделены запятой
Кортеж (Tuple)
- Сортированный
- Изменяемый
- Содержит дубликаты
Может быть использован как ключ для словаря
>>> tuple = ("apple", "banana", "cherry")
>>> tuple[1] # banana
'banana'
>>> tuple.count()
3
>>> tuple.index("banana")
1
Сет(Set)
- Сортированный
- Изменяемый
- Содержит дубликаты
Нельзя обращатся по индексу
set = {"apple", "banana", "cherry"}
set.add("orange")
set.update(["orange", "mango", "grapes"])
# пересечение
{"a"} & {"a", "b"}
{'a'}
# оъединение
{"a", "c"} | {"a", "b"}
{'b', 'a', 'c'}
# разность
{"a", "c"} ^ {"a", "b"}
{'b', 'c'}
# создание сета с уникальными символами из строки
set("aba")
{'b', 'a'}
Словарь (Dict)
- Сортированный
- Изменяемый
- Содержит дубликаты
>>> dict.keys()
>>> dict.values()
>>> "key" in dict # let's say this returns False, then...
>>> dict["key"] # ...this raises KeyError
>>> dict.get("key") # ...this returns None
>>> dict.setdefault("key", 1)
Строка (String)
- Изменяемый
>>> str[0:4]
>>> len(str)
>>> string.replace("-", " ") # поиск и замена
>>> ",".join(list) # объеденить элемены в строку, использовать разделитель запятую
>>> "hi {0}".format('j') # форматирование строки
>>> str.find(",") # поиск в строке
>>> str.index(",") # тоже самое, только бросает IndexError
>>> str.count(",")
>>> str.split(",")
>>> str.lower() # hello world
>>> str.upper() # HELLO WORLD
>>> str.title() # Hello World
>>> str.lstrip() # удаляет пробельные символы слева
>>> str.rstrip() # удаляет пробельные символы справа
>>> str.strip() # удаляет пробельные символы с обеих сторон
>>> str.islower() # проверка регистра lower/upper/title
Циклы
>>> for item in ["a", "b", "c"]:
>>> for i in range(4): # 0 to 3
>>> for i in range(4, 8): # 4 to 7
>>> for i in range(1, 9, 2): # 1, 3, 5, 7
>>> for key, val in dict.items():
>>> for index, item in enumerate(list):
Для цикла по двум и болеем последовательностям одновременно, их нужно объеденить через zip функцию.
>>> for q, a in zip(questions, answers):
... print('What is your {0}? It is {1}.'.format(q, a))
Для цикла последовательности в обратном порядке, укажи последовательность в прямом порядки и вызови функцию reversed.
>>> for i in reversed(range(1, 10, 2)):
... print(i)
Сортировка
>>> sorted([5, 2, 3, 1, 4]) # возвращает новый список
[1, 2, 3, 4, 5]
>>> a = [5, 2, 3, 1, 4]
>>> a.sort() # сортировка на лету
>>> a
[1, 2, 3, 4, 5]
Ключевые функции
Ключевые функции принимаю один аргумент и возвращают ключ для сортировки.
Пример регистронезависимой сортировки:
>>> sorted("This is a test string from Andrew".split(), key=str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
Сортировка по ключу картежа:
>>> student_tuples = [
... ('john', 'A', 15),
... ('jane', 'B', 12),
... ('dave', 'B', 10),
... ]
>>> sorted(student_tuples, key=lambda student: student[2])
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
Расширеные структуры данных
Очередь (Queue)
Добавление и удаления с конца списка быстрое, но вставка и удаление с начала списка медленная (потому что нужно сместить все элементы списка) Для реализации очереди можно использовать collections.deque который был сделан для добавления и удаления с любого конца. На пример:
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # добавляем Terry
>>> queue.append("Graham") # добавляем Graham
>>> queue.popleft() # Первый добавленый, первый и удаляется
'Eric'
>>> queue.popleft() # Удаляем второго
'John'
>>> queue # Оставшаяся очедь
deque(['Michael', 'Terry', 'Graham'])
Связанный список (Linked List)
class LinkedList:
def __ini__(self):
self.head = None
self.tail = None
def append(self, node):
self.tail.next = node
self.tail = node
def prepend(self, node):
node.next = self.head
self.head = node
class Node:
def __init__(self, val):
self.val = val,
self.next = None
comments powered by Disqus