Python. Строки и составные типы данных

Строки и символы

В программировании строки — это массив отдельных символов. В пайтоне для символьного типа данных существуют только строки, отдельно символов нет. Даже если хочется my_string = ’q’, то получится строка с одним символом внутри.

Пустая строка занимает 49 байт, потому что нужно место для ссылок на эту строку, её адреса в памяти и размере в памяти с символами. Все остальные символы занимают по одному байту. В конце строки добавляется нулевой байт, чтобы показать интерпретатору что она закончилась.

empty_string = str()  # Объявили пустую строку
print(empty_string.__sizeof__())  # Выведется 49, это размер пустой строки в байтах

empty_string = 'cmp'
print(empty_string.__sizeof__())  # Выведется 52, размер пустой строки плюс по байту на каждый символ

Чтобы объявить строку — пишем имя переменной и присваиваем ей значение в одиночных кавычках.

not_empty_string = 'cmp'


empty_string = str()  # Так создаётся пустая строка: сначала имя, потом функция str().

Индексы

К символам строки можно получать доступ по индексу, их месту в строке.

channel_name = 'Cmp-Sci'
print(channel_name[0])  # Выведется символ 'C'
print(channel_name[2])  # Выведется символ 'p'
Длина строки — семь символов, но считается с нуля, поэтому последний символ с индексом 6

Из строки можно достать несколько символов, это называется срезом.
Для среза можно передать три параметра: начало, количество символов для среза и шаг.
Не указанные параметры пайтон выставляет по дефолту: начало среза — начало строки, размер среза — вся строка, шаг среза — один.

channel_name = 'Cmp-Sci'
print(channel_name[0:2])  # Выведется 'Cm'

'''
Можно указывать отрицательные аргументы, это удобно когда в длинном 
предложении нужно убрать несколько символов с конца.
'''
print(channel_name[0:-2])

# Берём каждый второй символ от начала и до конца строки.
print(channel_name[::2])  # Выведется 'CpSi'

Строки можно складывать и дублировать. Сложение строк называется конкатенацией.

# Сложение строк
first_word = 'Cmp'
second_word = 'Sci'
print(first_word + second_word)  # Выведется 'CmpSci'
print(first_word + 'qq all' + second_word)  # Можно вставлять что-нибудь между слагаемыми в кавычках

# Дублирование строки
print(first_word * 3)  # Выведется 'CmpCmpCmp'

Строки в пайтоне — неизменяемые. Любая операция над строкой создаёт новую строку, а не изменяет старую. Чтобы ненужные переменные не занимали место в оперативке, их удаляет сборщик мусора. Это механизм, который следит за счётчиком ссылок на каждую переменную: на строку нет ссылок — он удаляет её. Можно удалить вручную: del name_variable

number = 5
print(number)  # Выведется пять

del number
print(number)  # Будет ошибка — number больше не существует

Списки

Коллекция из данных разных типов. Мы объявляем список и добавляем туда элементы, но на самом деле туда подставляются адреса на эти переменные.
Чтобы объявить список, пишем имя переменной и элементы списка через запятую в квадратных скобках. Можно сразу написать имя списка и присваивать элементы или сделать список через функцию.

first_list = [1, '3', 'sci']  # **int**овая единица, строковая тройка и 'sci'
first_list = list([1, '3', 'sci'])  # Список через функцию

second_list = list([1, 2, 3, 'a', ['cmp', 'sci'], 12])  # Элементом списка может быть другой список и в нём другой список и так далее

Размер пустого списка — 40 байт, каждый элемент списка добавляет 8 байт.

empty_list = list()
print(empty_list.__sizeof__())  # Выведется 40 — размер пустого списка

empty_list = [2, 3, 'abc']
print(empty_list.__sizeof__())  # Выведется 64 — размер пустого списка плюс три элемента

К спискам применяются срезы, как у строк.

numeric_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numeric_list[::2])  # Выведется [0, 2, 4, 6, 8]

Функции для списков

Для удобного редактирования или сортировки у списков есть встроенные функции.
Чтобы использовать функцию списка нужно вызвать ее из списка через точку: list_name.function().

list.append(element) добавляет element в конец списка list
list.insert(index, element) добавляет element на место index в списке list. Остальные элементы сдвигаются вправо
list.index(element) возвращает индекс первого элемента со значением element
list.count(element) возвращает количество element
list.remove(element) удаляет element
list.del(index) удаляет элемент по месту index
list.sort() сортирует список list по возрастанию. Строки сортируются по первой букве
list.reverse() переворачивает список list
list.pop() без аргументов — удаляет последний элемент, с аргументом — удаляет элемент по его индексу
len(list) возвращает длину списка list
max(list) возвращает максимальный элемент в списке list
min(list) возвращает минимальный элемент в списке list
element in list проверяет наличие элемента: True — есть в списке, False — нету

Последние четыре функции — общие. Их можно применять не только к спискам, ещё к строкам, массивам, кортежам и другим составным типам.

Кортежи

Это неизменяемый список, с меньшим потреблением памяти. Объявляются так же, но элементы в круглых скобках.

not_empty_tuple = ('a', 1, ('Cmp', 'Sci'))  # Элементом кортежа может быть другой кортеж
empty_tuple = tuple()  # Пустой кортеж

Кортежи занимают меньше памяти, чем списки. Пустой кортеж занимает 24 байта, а список — 40 байт. Размер элемента такой же — 8 байт.

empty_tuple = tuple()
print(empty_tuple.__sizeof__())  # Выведется 24 — размер пустого кортежа

empty_tuple = (1, 2, 'Cmp-Sci')
print(empty_tuple.__sizeof__())  # Выведется 48 — размер пустого кортежа + три элемента

Множества

Коллекция неодинаковых данных разных типов, которые расположатся в случайном порядке.
Делятся на два типа: сет — изменяемое множество, фрозенсет — неизменяемое множество.
Чтобы объявить множество пишем имя переменной и элементы через запятую в фигурных скобках. Или же через функцию.

alpha_set = {'a', 'b', 'c', 'd'}
string_set = set('hello')  # все функции пишутся с круглыми скобками
empty_set = set()

frozen_set = frozenset()  # Создали неизменяемое множество

Объявить пустое множество можно только через функцию, иначе получится словарь.
У множеств создано семнадцать встроенных функций, но мы их изучим, если будем что-то делать с множествами.
Чтобы добавить элемент element во множество set: set.add(element), чтобы удалить: set.remove(element).

Цикл for для строк, списков, кортежей и множеств

Цикл for в параметры прокрутки принимает последовательность элементов.
В i записывается ноль, а концом цикла будет число элементов в строке, списке, кортеже или множестве.

numeric_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

# Вывод всех элементов списка
for i in numeric_list:
    print(i) # Выведутся все элементы: от 1 до 15



В следующей статье будет разбор исключений, видов ошибок и их отслеживание.

Поделиться
Отправить
Запинить
Популярное