Программирование Python по моим конспектам. Лекция 28

Пост можно топить, минусить и всячески убивать, ибо в горячем он нахер не нужен, а вот подписчикам пригодится.


Для тех кто не в теме, тут я перевожу свои лекции по питону с языка немецкого на язык человеческий, поэтому- если что- я не виноват. Эти лекции созданы не для того, чтобы сделать из человека говнокодера, а для того, чтобы помочь в сложных темах, которые некому объяснить, а книга по программированию не может с этим помочь. Если вы никогда не были в такой ситуации- значит вы вундеркинд и я хочу от вас детей.


Отвечая на 90% одинаковых вопросов-


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



Я это делаю, потому что мне это нравится.



Привет, друзья.

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



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

В следующих лекциях мы поговорим с вами о последовательностях и генераторах.

Начнем с последовательностей, как мы помним это объекты, которые состоят из последовательностей других объектов. К ним относятся Списки, кортежи и строки.

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


оператор  in


x in str-  Возвращает 1, когда элемент со значением x присутствует в последовательности str

Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост

x not in str Возвращает 0, когда элемент со значением x присутствует в последовательности str


str*n- создание n копий последовательности str

Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост
Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост

str[i:j] так зыванный slice, или отрезок последовательности от элемента i до элемента j (не включительно)

Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост
Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост

Можно, также, не указывать первый или последний элимент слайса, в таком случае интерпритатор будет выводить нам элименты с самого начала (если мы напишем так str[:n])

или до конца, если мы напишем так str[n:]

Пример ниже.

Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост
Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост

Тут все просто, объяснений, надеюсь не требуется. Угадайте, что же будет при print (str[:])

Правильно, будет выведена целая последовательность на наш экран.


Иногда возникают ситуации, когда индекс нашей последовательности имеет отрицательное значение, что же тогда?

А ничего страшного. Просто мы "приходимся" по последовательности задом на перед.

Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост
Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост

Если вы знаете длину строки, то есть еще такая штука, которую мы можем провернуть с последовательностями, как распаковка значений. Это значит, в одном присвоении мы каждой переменной даем ссылку на определенный элимент последовательности. Звучит сложно, а на практике все просто

Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост

Вот как мы можем использовать этот прием на практике

Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост
Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост

А сейчас мы посмотрим на финт ушами, или более продвинутую распаковку

Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост
Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост

Ну как вам? а стало указывать на нулевой элемент, а  end стал у нас списком, который включает в себя все элементы после нулевого.


а еще так можно

Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост
Программирование Python по моим конспектам. Лекция 28 Программирование, Питон, Лекция, Длиннопост

Мы взяли первый элемент, который укажет на нулевой индекс, затем середину, и последний элемент, который укажет на 5 индекс.


На сегодня хватит. Пойду спать.

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий
Начнем с последовательностей, как мы помним это объекты, которые состоят из последовательностей других объектов.

А арбузы это плоды, которые состоят из арбузов :)


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


Называть список str (что напомню в добавок является встроенным типом) - это извращение.


У среза есть 3-й аргумент - step (шаг).

>>> list(range(10))[1::2]
[1, 3, 5, 7, 9]

И да, он тоже может быть отрицательным, что означает брать элементы в обратном порядке

>>> list(range(10))[10::-2]
[9, 7, 5, 3, 1]

Ну и основное применение list[:] в том, что возвращается копия списка (для строк и кортежей действие бессмысленное, т.к. они всё равно неизменяемые). И если менять копию, с оригинальным списком ничего не случится.

раскрыть ветку (2)
Автор поста оценил этот комментарий

Называть список str (что напомню в добавок является встроенным типом) - это извращение.


Ну что ж ты долго то так? Я с самой публикации поста подумал о этом, и ждал когда же кто нибудь доебется до моего str=)) А все потому что я ленивая жопа, и мне было лень исправить.


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


Дык в контексте же имелось ввиду, что у int, к примеру, нет длины. Поэтому, лезешь без мыла.

А вот про третий аргумент не знал, за это спасибочки)


раскрыть ветку (1)
1
Автор поста оценил этот комментарий

У множества например есть длина, но оно не является последовательностью.


А я могу вполне себе написать реализацию бесконечной последовательности (хотя уверен что кто-то это сделал до меня) у которой будут все необходимые для последовательности элементы, но не будет длины.


Длина это часть структуры данных в которой хранится последовательность, и к самой последовательности отношения не имеет.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку