Типы данных в Python: полный обзор и примеры
Категории встроенных типов
Python предлагает богатый набор встроенных типов данных, которые можно разделить на несколько категорий: числовые, последовательности, множества, отображения, логический и специальный тип None. Каждый тип имеет свои особенности, методы и правила использования. Ниже приведен обзор с примерами.
Числовые типы
Целые числа (int), числа с плавающей точкой (float) и комплексные числа (complex). Все они поддерживают арифметические операции.
a = 10
b = 3.14
c = 1 + 2j
d = a + b # 13.14
print(c.real, c.imag) # 1.0 2.0Python callable object (вызываемый объект в python)
Для комплексных чисел доступны атрибуты real и imag.
Последовательности
Строки (str), списки (list), кортежи (tuple), range, bytes, bytearray. Они поддерживают индексацию, срезы и итерацию.
s = 'hello'
l = [1, 2, 3]
t = (10, 20)
r = range(5)
b = b'abc'
ba = bytearray([100, 101, 102])
print(l[1]) # 2
print(s[1:4]) # ell
print(list(r)) # [0,1,2,3,4]Int object python (объект int в python)
Множества
Set и frozenset. Set изменяемый, frozenset неизменяемый и хешируемый.
myset = {1, 2, 3}
fset = frozenset([4, 5, 6])
myset.add(4)
print(myset) # {1,2,3,4}
встроенные типы python (встроенные типы python)
Отображения
Словарь (dict) хранит пары ключ-значение. Ключи должны быть хешируемыми.
d = {'name': 'Alice', 'age': 30}
print(d['name']) # Alice
for k, v in d.items():
print(k, v)Логический и None
Тип bool (True/False) и NoneType (None). None используется для обозначения отсутствия значения.
flag = True
val = None
print(type(flag)) #
print(val is None) # True Как выбрать между list и tuple?
Список (list) изменяемый, кортеж (tuple) неизменяемый. Если данные не планируется изменять, лучше использовать кортеж. Это делает код безопаснее и позволяет использовать кортеж в качестве ключа словаря.
coord = (10, 20) # кортеж
coord[0] = 5 # ошибка TypeErrorКогда использовать set вместо list?
Set обеспечивает быстрое удаление, добавление и проверку принадлежности. Не сохраняет порядок. Используйте set для уникальных элементов и операций вроде пересечения, объединения.
a = [1,2,2,3]
unique = set(a) # {1,2,3}
print(1 in a) # TrueКак преобразовать строку в число и обратно?
Функции int() и float() преобразуют строку в число. str() преобразует число в строку. Важно, что строка должна содержать корректное числовое представление.
s = '42'
n = int(s) # 42
f = float('3.14') # 3.14
print(str(n + f)) # '45.14'Как создать словарь с использованием dict comprehension?
Dict comprehension позволяет быстро создать словарь на основе итерируемого объекта.
squares = {x: x**2 for x in range(6)}
print(squares) # {0:0, 1:1, 2:4, 3:9, 4:16, 5:25}Расширенные примеры использования встроенных типов
Ниже приведены более сложные и неочевидные примеры работы с встроенными типами.
Комплексные числа и модуль cmath
import cmath
z = 3 + 4j
print('Амплитуда:', abs(z))
print('Фаза:', cmath.phase(z))
print('Комплексное сопряжение:', z.conjugate())Амплитуда: 5.0 Фаза: 0.9272952180016122 Комплексное сопряжение: (3-4j)
Работа с bytes и кодировками
text = 'Hello'
b = text.encode('utf-8')
print(b) # b'Hello'
back = b.decode('utf-8')
print(back) # Hellob'Hello' Hello
Использование memoryview для изменения bytearray
ba = bytearray(b'abcdef')
mv = memoryview(ba)
mv[1:4] = b'XYZ'
print(ba) # bytearray(b'aXYZef')bytearray(b'aXYZef')
Frozenset как ключ словаря
params = frozenset(['width', 'height'])
cfg = {params: [1920, 1080]}
print(cfg) # {frozenset({'width', 'height'}): [1920, 1080]}{frozenset({'width', 'height'}): [1920, 1080]}Range с отрицательным шагом
r = range(10, 0, -2)
print(list(r)) # [10, 8, 6, 4, 2]
print(5 in r) # False (5 не входит)[10, 8, 6, 4, 2] False
Dict.fromkeys для создания словаря
keys = ['a', 'b', 'c']
d = dict.fromkeys(keys, 0)
print(d) # {'a': 0, 'b': 0, 'c': 0}{'a': 0, 'b': 0, 'c': 0}Вложенные списки и поверхностное копирование
mat = [[0]*3 for _ in range(3)]
mat[0][0] = 1
print(mat) # [[1,0,0],[0,0,0],[0,0,0]]
# Ошибка: если использовать [[0]*3]*3, строки будут копироваться, и изменение одной повлияет на все[[1, 0, 0], [0, 0, 0], [0, 0, 0]]