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