Подробнее и больше про строки и срезы



 

Строки в Python - упорядоченные последовательности символов, используемые для хранения и представления текстовой информации, поэтому с помощью строк можно работать со всем, что может быть представлено в текстовой форме.

 

Строки в апострофах и в кавычках

S = 'spam"s'

S = "spam's"

Строки в апострофах и в кавычках - одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не используя экранирование.

 

Экранированные последовательности - служебные символы. Позволяют вставить символы, которые сложно ввести с клавиатуры.

 

\n      Перевод строки

\a       Звонок

\b      Забой

\f       Перевод страницы

\r       Возврат каретки

\t       Горизонтальная табуляция

\v       Вертикальная табуляция

\0       Символ Null (не является признаком конца строки)

 

"Сырые" строки - подавляют экранирование

Если перед открывающей кавычкой стоит символ 'r' (в любом регистре), то механизм экранирования отключается.

S = r'C:\newt.txt'

 

Но, несмотря на назначение, "сырая" строка не может заканчиваться символом обратного слэша. Пути решения:

S = r'\n\n\\'[:-1]

S = r'\n\n' + '\\'

S = '\\n\\n'

 

Строки в тройных апострофах или кавычках

Главное достоинство строк в тройных кавычках в том, что их можно использовать для записи многострочных блоков текста. Внутри такой строки возможно присутствие кавычек и апострофов, главное, чтобы не было трех кавычек подряд.

 

>>> c = '''это очень большая

... строка, многострочный

... блок текста'''

 

>>> print(c)

это очень большая

строка, многострочный

блок текста

 

Конкатенация (сложение)

>>> S1 = 'spam'

>>> S2 = 'eggs'

>>> print(S1 + S2)

'spameggs'

 

Дублирование строки

>>> print('spam' * 3)

spamspamspam

 

Длина строки (функция len)

>>> len('spam')

4

 

Доступ по индексу

>>> S = 'spam'

>>> S[0]

's'

>>> S[2]

'a'

>>> S[-2]

'a'

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

 

Извлечение среза

Оператор извлечения среза: [X:Y]. X – начало среза, а Y – окончание;

символ с номером Y в срез не входит. По умолчанию первый индекс равен 0, а второй - длине строки.

 

>>> s = 'spameggs'

>>> s[3:5]

'me'

>>> s[2:-2]

'ameg'

>>> s[:6]

'spameg'

>>> s[1:]

'pameggs'

>>> s[:]

'spameggs'

 

Кроме того, можно задать шаг, с которым нужно извлекать срез.

>>> s[::-1]

'sggemaps'

>>> s[3:5:-1]

''

>>> s[2::2]

'aeg'

 

При вызове методов необходимо помнить, что строки в Python относятся к категории неизменяемых последовательностей, то есть все функции и методы могут лишь создавать новую строку.

 

>>> s = 'spam'

>>> s[1] = 'b'

Traceback (most recent call last):

File "", line 1, in

s[1] = 'b'

TypeError: 'str' object does not support item assignment

>>> s = s[0] + 'b' + s[2:]

>>> s

'sbam'

 

Поэтому все строковые методы возвращают новую строку, которую потом следует присвоить переменной.

 

*

 

Как и во многих других языках, нумерация элементов начинается с нуля. При попытке доступа к несуществующему индексу возникает исключение IndexError.

 

В Python также поддерживаются отрицательные индексы, при этом нумерация идёт с конца, например:

 

>>> a = [1, 3, 8, 7]

>>> a[-1]

7

>>> a[-4]

1

>>> a[-5]

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

IndexError: list index out of range

 

В Python, кроме индексов, существуют ещё и срезы.

 

item[START:STOP:STEP] - берёт срез от номера START, до STOP (не включая его), с шагом STEP. По умолчанию START = 0, STOP = длине объекта, STEP = 1. Соответственно, какие-нибудь (а возможно, и все) параметры могут быть опущены.

 

>>> a = [1, 3, 8, 7]

>>> a[:]

[1, 3, 8, 7]

 

>>> a[1:]

[3, 8, 7]

 

>>> a[:3]

[1, 3, 8]

 

>>> a[::2]

[1, 8]

 

Также все эти параметры могут быть и отрицательными:

>>> a = [1, 3, 8, 7]

>>> a[::-1]

[7, 8, 3, 1]

 

>>> a[:-2]

[1, 3]

 

>>> a[-2::-1]

[8, 3, 1]

 

>>> a[1:4:-1]

[]

 

В последнем примере получился пустой список, так как START < STOP, а STEP отрицательный. То же самое произойдёт, если диапазон значений окажется за пределами объекта:

 

>>> a = [1, 3, 8, 7]

>>> a[10:20]

[]

 

Также с помощью срезов можно не только извлекать элементы, но и добавлять и удалять элементы (разумеется, только для изменяемых последовательностей).

 

>>> a = [1, 3, 8, 7]

>>> a[1:3] = [0, 0, 0]

>>> a

[1, 0, 0, 0, 7]

 

>>> del a[:-3]

>>> a

[0, 0, 7]

 

________________________________________________________________________

Кортежи ( tuple)

 

Кортеж, по сути - неизменяемый список. Зачем нужны кортежи, если есть списки?

 

* Защита от дурака. То есть кортеж защищен от изменений, как намеренных (что плохо), так и случайных (что хорошо).

 

* Меньший размер. Дабы не быть голословным:

>>> a = (1, 2, 3, 4, 5, 6)

>>> b = [1, 2, 3, 4, 5, 6]

>>> a.__sizeof__()

36

>>> b.__sizeof__()

44

 

* Возможность использовать кортежи в качестве ключей словаря.

 

Как работать с кортежами?

С преимуществами кортежей разобрались, теперь встает вопрос - а как с ними работать. Примерно так же, как и со списками.

 

Создаем пустой кортеж:

>>> a = tuple() # С помощью встроенной функции tuple()

>>> a

()

 

Или так:

>>> a = () # С помощью литерала кортежа

 

Создаем кортеж из одного элемента:

>>> a = ('s')

>>> a

's'

 

Стоп. Получилась строка. Но как же так? Мы же кортеж хотели! Как же нам кортеж получить?

>>> a = ('s', )

>>> a

('s',)

 

Ура! Заработало! Все дело - в запятой. Сами по себе скобки ничего не значат, точнее, значат то, что внутри них находится одна инструкция, которая может быть отделена пробелами, переносом строк и прочим мусором.

 

Кстати, кортеж можно создать и так:

>>> a = 's',

>>> a

('s',)

Но все же не увлекайтесь, и ставьте скобки, тем более, что бывают случаи, когда скобки необходимы.

 

Ну и создать кортеж из итерируемого объекта можно с помощью все той же пресловутой функции tuple()

>>> a = tuple('hello, world!')

>>> a

('h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!')

 

Операции с кортежами

Все операции над списками, не изменяющие список (сложение, умножение на число, методы index() и count() и некоторые другие операции). Можно также по-разному менять элементы местами и так далее.

 

Например, гордость программистов на python - поменять местами значения двух переменных:

a, b = b, a

 

________________________________________________________________________

Множество ( set)

 

Множество в python - "контейнер", содержащий не повторяющиеся элементы в случайном порядке.

 

Создаём множества:

>>> a = set()

>>> a

set()

 

>>> a = set('hello')

>>> a

{'h', 'o', 'l', 'e'}

 

>>> a = {'a', 'b', 'c', 'd'}

>>> a

{'b', 'c', 'a', 'd'}

 

>>> a = {i ** 2 for i in range(10)} # генератор множеств

>>> a

{0, 1, 4, 81, 64, 9, 16, 49, 25, 36}

 

>>> a = {} # А так нельзя!

>>> type(a)

<class 'dict'>

 

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

 

Множества удобно использовать для удаления повторяющихся элементов:

>>> words = ['hello', 'daddy', 'hello', 'mum']

>>> set(words)

{'hello', 'daddy', 'mum'}

 

С множествами можно выполнять множество операций: находить объединение, пересечение.

 

len(s) - число элементов в множестве (размер множества).

x in s - принадлежит ли x множеству s.

set.isdisjoint(other) - истина, если set и other не имеют общих элементов.

set == other - все элементы set принадлежат other, все элементы other принадлежат set.

set.issubset(other) или set <= other - все элементы set принадлежат other.

set.issuperset(other) или set >= other - аналогично.

set.union(other, ...) или set | other | ... - объединение нескольких множеств.

set.intersection(other, ...) или set & other & ... - пересечение.

set.difference(other, ...) или set - other - ... - множество из всех элементов set, не принадлежащие ни одному из other.

set.symmetric_difference(other); set ^ other - множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих.

set.copy() - копия множества.

 

И операции, непосредственно изменяющие множество:

set.update(other, ...); set |= other | ... - объединение.

set.intersection_update(other, ...); set &= other & ... - пересечение.

set.difference_update(other, ...); set -= other | ... - вычитание.

set.symmetric_difference_update(other); set ^= other - множество из элементов, встречающихся в одном множестве, но не встречающиеся в обоих.

set.add(elem) - добавляет элемент в множество.

set.remove(elem) - удаляет элемент из множества. KeyError, если такого элемента не существует.

set.discard(elem) - удаляет элемент, если он находится в множестве.

set.pop() - удаляет первый элемент из множества. Так как множества не упорядочены, нельзя точно сказать, какой элемент будет первым.

set.clear() - очистка множества.

 

Единственное отличие set от frozenset заключается в том, что set - изменяемый тип данных, а frozenset - нет. Примерно похожая ситуация с списками и кортежами.

 

________________________________________________________________________


Дата добавления: 2018-09-22; просмотров: 265; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!