Python типы: числа строки списки и словари
Основные типы данных в Python
Python предоставляет разнообразные типы данных, которые делятся на изменяемые и неизменяемые, упорядоченные и неупорядоченные. Выбор правильного типа повышает эффективность кода.
Все типы данных являются объектами. Ниже приведены подробные варианты работы с каждым типом.
Как хранить целые числа в Python?
Тип int
Для целых чисел используется тип int. Он поддерживает произвольную точность.
a = 42
b = -7
c = 12345678901234567890
print(a, b, c)тип данных используемый в python (типы данных, используемые в python)
42 -7 12345678901234567890
Типичная ошибка:
print(5/2) # 2.5
print(5//2) # 2
Как работать с числами с плавающей точкой?
Тип float
Тип float представляет числа с плавающей точкой двойной точности.
x = 3.1415
y = 1.23e-4
print(x, y)
3.1415 0.000123
Проблема точности:
print(0.1 + 0.2) # 0.30000000000000004
Для точных десятичных вычислений лучше использовать модуль decimal.
Как обрабатывать текстовые данные?
Тип str
Строки неизменяемы. Поддерживают одинарные, двойные кавычки и тройные для многострочных.
s1 = 'Hello'
s2 = "World"
s3 = '''Multi
line'''
print(s1, s2, s3[0])
Hello World M
Ошибка индексации:
print(s1[10]) # IndexError
Перед обращением проверяйте длину строки.
Как представлять логические значения?
Тип bool
Имеет значения True и False. Является подклассом int.
a = True
b = False
print(a and b, a or b, not a)
False True False
Неявное приведение:
print(1 == True, 0 == False) # True True
Сравнение с числами может привести к путанице.
Как создать упорядоченную изменяемую коллекцию?
Тип list
Списки хранят элементы разных типов, допускают изменение, добавление, удаление.
lst = [1, 'a', 3.14]
lst.append(2)
lst[0] = 10
print(lst)
[10, 'a', 3.14, 2]
Ошибка изменения при передаче по ссылке:
def f(l):
l.append(100)
my_list = [1,2,3]
f(my_list)
print(my_list) # [1,2,3,100]
Список изменяется внутри функции, что не всегда ожидаемо. Для копирования используйте copy() или срезы.
Как создать неизменяемую последовательность?
Тип tuple
Кортежи похожи на списки, но не могут быть изменены после создания. Часто используются для фиксированных данных.
t = (1, 2, 3)
print(t[0])
# t[0] = 5 # TypeError
1
Кортеж из одного элемента:
single = (5) # int
single_tuple = (5,)
print(type(single), type(single_tuple))
<class 'int'> <class 'tuple'>
Обязательно ставить запятую.
Как хранить уникальные элементы без порядка?
Тип set
Множество - неупорядоченная коллекция уникальных элементов. Быстрая проверка вхождения.
s = {1, 2, 3, 2}
print(s)
s.add(4)
print(1 in s)
{1, 2, 3}
True
Неизменяемые элементы:
s2 = {[1,2]} # TypeError: unhashable type: 'list'
Множество может содержать только хэшируемые объекты.
Как хранить пары ключ-значение?
Тип dict
Словарь - неупорядоченная (до Python 3.7) структура с уникальными ключами. С 3.7 сохраняет порядок вставки.
d = {'name': 'Alice', 'age': 25}
d['age'] = 26
d['city'] = 'NY'
print(d.keys())
dict_keys(['name', 'age', 'city'])
Ошибка доступа к отсутствующему ключу:
print(d['salary']) # KeyError
Используйте метод get() или проверяйте ключ оператором in.
Как обозначить отсутствие значения?
Тип NoneType
Единственное значение None. Используется для обозначения пустоты или отсутствия результата.
x = None
print(type(x))
if x is None:
print('Nothing')
<class 'NoneType'> Nothing
Сравнение с None:
if x == None: # не рекомендуется
pass
Лучше использовать is None, так как None - синглтон.
Расширенные примеры работы с типами данных
1. Точные десятичные вычисления (Decimal)
from decimal import Decimal, getcontext
getcontext().prec = 6
x = Decimal('0.1')
y = Decimal('0.2')
print(x + y) # 0.3 без ошибки округления
0.3
2. Комплексные числа (complex)
z1 = 3 + 4j
z2 = complex(1, 2)
print(z1 + z2, z1.real, z1.imag)
(4+6j) 3.0 4.0
3. Замороженное множество (frozenset) как хэшируемый набор
fs = frozenset([1, 2, 3])
d = {fs: 'value'} # можно использовать как ключ
print(d[fs])
value
4. Двоичные данные: bytes и bytearray
b = b'hello'
ba = bytearray(b)
ba[0] = 72 # преобразуем 'h' в 'H' (72)
print(ba.decode())
Hello
5. Проверка типа с помощью isinstance и type
def process(value):
if isinstance(value, (int, float)):
print('Число')
elif type(value) == str:
print('Строка')
else:
print('Другой тип')
process(10), process('abc'), process([1])
Число Строка Другой тип
6. Кортеж как ключ словаря
coords = {}
coords[(10, 20)] = 'point A'
coords[(30, 40)] = 'point B'
print(coords[(10, 20)])
point A
7. Преобразование списка строк в одну строку (join)
words = ['Python', 'типы', 'данных']
line = ', '.join(words)
print(line)
Python, типы, данных
8. Операции над множествами: объединение, пересечение, разность
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
print('Объединение:', A | B)
print('Пересечение:', A & B)
print('Разность A-B:', A - B)
Объединение: {1, 2, 3, 4, 5, 6}
Пересечение: {3, 4}
Разность A-B: {1, 2}