REF: Шпаргалка по Python
Структуры данных
Арифметические операции
3 // 2 # 1 округленное вниз целочисленное значение 3 % 2 # 1 остаток от деления int(3.9) # = 3
Логика
Автоматически вычисляются к False: None, 0 (целое), 0.0 (вещественное), пустые строки и объекты контейнерных типов. Оператор and обладает приоритетом перед or.Строки
st, s = "aaa", 'aa' st.strip() # удаляем пробелы вначале и конце (возврат новой строки) st.lower() # в нижний регистр st.upper() # в вехний регистр st.startswith(s) # начинается со строки s (True, False) st.endswith(s) # заканчивается строкой s (True, False) st.find(s) # индекс найденного вхождения (int) s in st # s содержится в st (True, False) st.replace(s1,s2) # заменить все s1 на s2 ','.join(["F", "B", "I"]) # cклеить элементы списка с разделителем
Память
Строки, числа - неизменяемые объектыy = x = 3 s1, s2, i1, i2 = "aaa", "aaa", 1, 1 x is y # True (ссылаются на одну память) s1 is s2 # True i1 is i2 # True [3] is [3] # False id(x) # 2546626711664 (адрес в памяти)
Списки
lst = [1, 2, 3] lst.append(4) # [1, 2, 3, 4] ничего не возращает (в нём же) lst.insert(2, 4) # [1, 2, 4, 3] (на 2-ю позицию, сдвигая вправо) [1, 2, 3] + [4, 5] # [1, 2, 3, 4, 5] конкатенация lst.extend([4, 5]) # тоже но эффективнее (?) lst.pop() # 4 [1, 2, 3] удалить последний, вернув его lst.pop(1) # 2 [1, 3, 4] удалить второй lst[1], вернув его lst.remove(2) # удаляет первую 2-ку (если нет - будет исключение) lst.reverse() # перевернуть список 1 in lst # есть или нет в списке lst.sort() # лексографически сортировать (элементы сравнимы) lst.sort(reverse = True) # в обратном порядке lst.sort(key = lambda x: x%2) # [1,2,3,4] -> [2,4,1,3] lst = list( filter(lambda x: x % 2, lst) )# [1,2,3,4] -> [1,3] lst = list( filter(None, tokens) ) # ['a','','b'] -> ['a','b'] убрать пустые строки
Множество
Элементы должны быть хешируемыми (числа, строки, но не списки)hash('a') # -5021022557028035767 s = {'a','a','b'} # {'b','a'} порядок не определён, значения уникальны 'a' in s # принадлежность
Ассоциативные массивы
Выполняет операцию t[hash('x')] и проверяет, не равно ли None возвращаемое значение.t = {'x' : 1, 'y' : 2} t['x'] = 3 # если ключа 'x' нет - исключение, иначе значение t.get('x') # None если нет, иначе значение 'x' in t # есть ли ключ t.keys(), t.values() # ключи, значения for k, v in t.items(): # пары ключ-значение print(k) if v > 5 else None
Управление и функции
Циклы и ветвления
for i in [0, 1, 2]: j = 0 if x > 3: print("Big") print(i) while j < 3: elif x == 3: print("Medium") j = j + 1 else: print("Small")
Функции
def f(x, y=2): return x*y f = lambda x,y: x+y # lambda аргументы : возвращаемое выражение z = f(2,3)
Списковое включение и map
lst = [x**2 for x in range(10)] lst = [(1,2), (3,4)] [x for x,y in lst if y > 2] # [1] [(x, y) for x in range(3) for y in range(3)]) ([line.strip() for line in open("readFile.py")] [[x for x in line.split() if len(x) > 3] for line in text.split('\n')]Функция map() применяет функцию к каждому элементу итерируемого объекта. Если объектов несколько, остановит расчеты после достижения конца наиболее короткого объекта:
list(map(lambda x: 2*x, [1,2,3])) # [2, 4, 6] txt = ['girl like boy', 'boy is programmer'] mark = list( map(lambda s: (True, s) if 'girl' in s else (False, s), txt) ) powers = list(map(pow, [2,3], [1, 2, 3])) # [2, 9] = 2**1, 3**2
Срезы
s = [0, 1, 2, 3, 4] # список s[:] # копия списка (новая память) s[1:] # [1, 2, 3, 4] все, кроме первого s[-3:] # [2, 3, 4] последние 3 s[1:4:2] # [1, 3] с шагом 2 del s[1:3] # s = [0, 3, 4] удаление s[1:4:2]=list("ab") # s = [0,'a',2,'b',4] замена "Hello!"[2:4] # 'll' списки, строки, кортежи "Hello!"[::-1] # '!olleH' переворотЧтобы объекты понимали срезы (slice), необходимо определить методы __getitem__, __setitem__, __delitem__ (атрибуты key могут быть None, надо проверять):
class MySliceble(): def __getitem__(self, key): if isinstance(key, slice): return list(range(key.start, key.stop, key.step)) else: raise Exception("Trying to access by index") my = MySliceble() my[2:9:2] # [2, 4, 6, 8]
