[{"data":1,"prerenderedAt":2498},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fpython\u002Fst17":386,"\u002Fblog\u002Fpython\u002Fst17-surround":2493},[4],{"title":5,"path":6,"stem":7,"children":8,"page":114},"Blog","\u002Fblog","blog",[9,115,184,329],{"title":10,"path":11,"stem":12,"children":13,"page":114},"Ege","\u002Fblog\u002Fege","blog\u002Fege",[14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94,98,102,106,110],{"title":15,"path":16,"stem":17},"ЕГЭ Задание 1","\u002Fblog\u002Fege\u002Ftask1","blog\u002Fege\u002Ftask1",{"title":19,"path":20,"stem":21},"ЕГЭ Задание 10","\u002Fblog\u002Fege\u002Ftask10","blog\u002Fege\u002Ftask10",{"title":23,"path":24,"stem":25},"ЕГЭ Задание 11","\u002Fblog\u002Fege\u002Ftask11","blog\u002Fege\u002Ftask11",{"title":27,"path":28,"stem":29},"ЕГЭ Задание 12","\u002Fblog\u002Fege\u002Ftask12","blog\u002Fege\u002Ftask12",{"title":31,"path":32,"stem":33},"ЕГЭ Задание 13","\u002Fblog\u002Fege\u002Ftask13","blog\u002Fege\u002Ftask13",{"title":35,"path":36,"stem":37},"ЕГЭ Задание 14","\u002Fblog\u002Fege\u002Ftask14","blog\u002Fege\u002Ftask14",{"title":39,"path":40,"stem":41},"ЕГЭ Задание 15","\u002Fblog\u002Fege\u002Ftask15","blog\u002Fege\u002Ftask15",{"title":43,"path":44,"stem":45},"ЕГЭ Задание 16","\u002Fblog\u002Fege\u002Ftask16","blog\u002Fege\u002Ftask16",{"title":47,"path":48,"stem":49},"ЕГЭ Задание 17","\u002Fblog\u002Fege\u002Ftask17","blog\u002Fege\u002Ftask17",{"title":51,"path":52,"stem":53},"ЕГЭ Задание 18","\u002Fblog\u002Fege\u002Ftask18","blog\u002Fege\u002Ftask18",{"title":55,"path":56,"stem":57},"ЕГЭ Задание 19, 20, 21","\u002Fblog\u002Fege\u002Ftask19_20_21","blog\u002Fege\u002Ftask19_20_21",{"title":59,"path":60,"stem":61},"ЕГЭ Задание 2","\u002Fblog\u002Fege\u002Ftask2","blog\u002Fege\u002Ftask2",{"title":63,"path":64,"stem":65},"ЕГЭ Задание 22","\u002Fblog\u002Fege\u002Ftask22","blog\u002Fege\u002Ftask22",{"title":67,"path":68,"stem":69},"ЕГЭ Задание 23","\u002Fblog\u002Fege\u002Ftask23","blog\u002Fege\u002Ftask23",{"title":71,"path":72,"stem":73},"ЕГЭ Задание 24","\u002Fblog\u002Fege\u002Ftask24","blog\u002Fege\u002Ftask24",{"title":75,"path":76,"stem":77},"ЕГЭ Задание 25","\u002Fblog\u002Fege\u002Ftask25","blog\u002Fege\u002Ftask25",{"title":79,"path":80,"stem":81},"ЕГЭ Задание 26","\u002Fblog\u002Fege\u002Ftask26","blog\u002Fege\u002Ftask26",{"title":83,"path":84,"stem":85},"ЕГЭ Задание 27","\u002Fblog\u002Fege\u002Ftask27","blog\u002Fege\u002Ftask27",{"title":87,"path":88,"stem":89},"ЕГЭ Задание 3","\u002Fblog\u002Fege\u002Ftask3","blog\u002Fege\u002Ftask3",{"title":91,"path":92,"stem":93},"ЕГЭ Задание 4","\u002Fblog\u002Fege\u002Ftask4","blog\u002Fege\u002Ftask4",{"title":95,"path":96,"stem":97},"ЕГЭ Задание 5","\u002Fblog\u002Fege\u002Ftask5","blog\u002Fege\u002Ftask5",{"title":99,"path":100,"stem":101},"ЕГЭ Задание 6","\u002Fblog\u002Fege\u002Ftask6","blog\u002Fege\u002Ftask6",{"title":103,"path":104,"stem":105},"ЕГЭ Задание 7","\u002Fblog\u002Fege\u002Ftask7","blog\u002Fege\u002Ftask7",{"title":107,"path":108,"stem":109},"ЕГЭ Задание 8","\u002Fblog\u002Fege\u002Ftask8","blog\u002Fege\u002Ftask8",{"title":111,"path":112,"stem":113},"ЕГЭ Задание 9","\u002Fblog\u002Fege\u002Ftask9","blog\u002Fege\u002Ftask9",false,{"title":116,"path":117,"stem":118,"children":119,"page":114},"Oge","\u002Fblog\u002Foge","blog\u002Foge",[120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180],{"title":121,"path":122,"stem":123},"ОГЭ Задание 1","\u002Fblog\u002Foge\u002Ftask1","blog\u002Foge\u002Ftask1",{"title":125,"path":126,"stem":127},"ОГЭ Задание 10","\u002Fblog\u002Foge\u002Ftask10","blog\u002Foge\u002Ftask10",{"title":129,"path":130,"stem":131},"ОГЭ Задание 11","\u002Fblog\u002Foge\u002Ftask11","blog\u002Foge\u002Ftask11",{"title":133,"path":134,"stem":135},"ОГЭ Задание 12","\u002Fblog\u002Foge\u002Ftask12","blog\u002Foge\u002Ftask12",{"title":137,"path":138,"stem":139},"ОГЭ Задание 13","\u002Fblog\u002Foge\u002Ftask13","blog\u002Foge\u002Ftask13",{"title":141,"path":142,"stem":143},"ОГЭ Задание 14","\u002Fblog\u002Foge\u002Ftask14","blog\u002Foge\u002Ftask14",{"title":145,"path":146,"stem":147},"ОГЭ Задание 15","\u002Fblog\u002Foge\u002Ftask15","blog\u002Foge\u002Ftask15",{"title":149,"path":150,"stem":151},"ОГЭ Задание 16","\u002Fblog\u002Foge\u002Ftask16","blog\u002Foge\u002Ftask16",{"title":153,"path":154,"stem":155},"ОГЭ Задание 2","\u002Fblog\u002Foge\u002Ftask2","blog\u002Foge\u002Ftask2",{"title":157,"path":158,"stem":159},"ОГЭ Задание 3","\u002Fblog\u002Foge\u002Ftask3","blog\u002Foge\u002Ftask3",{"title":161,"path":162,"stem":163},"ОГЭ Задание 4","\u002Fblog\u002Foge\u002Ftask4","blog\u002Foge\u002Ftask4",{"title":165,"path":166,"stem":167},"ОГЭ Задание 5","\u002Fblog\u002Foge\u002Ftask5","blog\u002Foge\u002Ftask5",{"title":169,"path":170,"stem":171},"ОГЭ Задание 6","\u002Fblog\u002Foge\u002Ftask6","blog\u002Foge\u002Ftask6",{"title":173,"path":174,"stem":175},"ОГЭ Задание 7","\u002Fblog\u002Foge\u002Ftask7","blog\u002Foge\u002Ftask7",{"title":177,"path":178,"stem":179},"ОГЭ Задание 8","\u002Fblog\u002Foge\u002Ftask8","blog\u002Foge\u002Ftask8",{"title":181,"path":182,"stem":183},"ОГЭ Задание 9","\u002Fblog\u002Foge\u002Ftask9","blog\u002Foge\u002Ftask9",{"title":185,"path":186,"stem":187,"children":188,"page":114},"Python","\u002Fblog\u002Fpython","blog\u002Fpython",[189,193,197,201,205,209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269,273,277,281,285,289,293,297,301,305,309,313,317,321,325],{"title":190,"path":191,"stem":192},"Знакомство с синтаксисом","\u002Fblog\u002Fpython\u002Fst1","blog\u002Fpython\u002Fst1",{"title":194,"path":195,"stem":196},"Отладка","\u002Fblog\u002Fpython\u002Fst10","blog\u002Fpython\u002Fst10",{"title":198,"path":199,"stem":200},"Модули и пакеты","\u002Fblog\u002Fpython\u002Fst11","blog\u002Fpython\u002Fst11",{"title":202,"path":203,"stem":204},"Кортежи","\u002Fblog\u002Fpython\u002Fst12","blog\u002Fpython\u002Fst12",{"title":206,"path":207,"stem":208},"Знакомство со списками","\u002Fblog\u002Fpython\u002Fst13","blog\u002Fpython\u002Fst13",{"title":210,"path":211,"stem":212},"Списки и циклы","\u002Fblog\u002Fpython\u002Fst14","blog\u002Fpython\u002Fst14",{"title":214,"path":215,"stem":216},"Использование списков ч.1","\u002Fblog\u002Fpython\u002Fst15","blog\u002Fpython\u002Fst15",{"title":218,"path":219,"stem":220},"Использование списков ч.2","\u002Fblog\u002Fpython\u002Fst16","blog\u002Fpython\u002Fst16",{"title":222,"path":223,"stem":224},"Использование списков ч.3","\u002Fblog\u002Fpython\u002Fst17","blog\u002Fpython\u002Fst17",{"title":226,"path":227,"stem":228},"Словари","\u002Fblog\u002Fpython\u002Fst18","blog\u002Fpython\u002Fst18",{"title":230,"path":231,"stem":232},"Множества","\u002Fblog\u002Fpython\u002Fst19","blog\u002Fpython\u002Fst19",{"title":234,"path":235,"stem":236},"Переменные","\u002Fblog\u002Fpython\u002Fst2","blog\u002Fpython\u002Fst2",{"title":238,"path":239,"stem":240},"Хеш-таблицы","\u002Fblog\u002Fpython\u002Fst20","blog\u002Fpython\u002Fst20",{"title":242,"path":243,"stem":244},"Решето Эратосфена","\u002Fblog\u002Fpython\u002Fst21","blog\u002Fpython\u002Fst21",{"title":246,"path":247,"stem":248},"Длинная арифметика","\u002Fblog\u002Fpython\u002Fst22","blog\u002Fpython\u002Fst22",{"title":250,"path":251,"stem":252},"Декораторы функций","\u002Fblog\u002Fpython\u002Fst23","blog\u002Fpython\u002Fst23",{"title":254,"path":255,"stem":256},"Знакомство с алгоритмами","\u002Fblog\u002Fpython\u002Fst24","blog\u002Fpython\u002Fst24",{"title":258,"path":259,"stem":260},"Бинарный поиск – примеры задач","\u002Fblog\u002Fpython\u002Fst25","blog\u002Fpython\u002Fst25",{"title":262,"path":263,"stem":264},"Сортировка выбором","\u002Fblog\u002Fpython\u002Fst26","blog\u002Fpython\u002Fst26",{"title":266,"path":267,"stem":268},"Рекурсия и стек","\u002Fblog\u002Fpython\u002Fst27","blog\u002Fpython\u002Fst27",{"title":270,"path":271,"stem":272},"Быстрая сортировка","\u002Fblog\u002Fpython\u002Fst28","blog\u002Fpython\u002Fst28",{"title":274,"path":275,"stem":276},"Поиск в ширину","\u002Fblog\u002Fpython\u002Fst29","blog\u002Fpython\u002Fst29",{"title":278,"path":279,"stem":280},"Работа со строками","\u002Fblog\u002Fpython\u002Fst3","blog\u002Fpython\u002Fst3",{"title":282,"path":283,"stem":284},"Поиск в глубину","\u002Fblog\u002Fpython\u002Fst30","blog\u002Fpython\u002Fst30",{"title":286,"path":287,"stem":288},"Сбалансированные деревья","\u002Fblog\u002Fpython\u002Fst31","blog\u002Fpython\u002Fst31",{"title":290,"path":291,"stem":292},"Алгоритм Дейкстры","\u002Fblog\u002Fpython\u002Fst32","blog\u002Fpython\u002Fst32",{"title":294,"path":295,"stem":296},"Жадные алгоритмы","\u002Fblog\u002Fpython\u002Fst33","blog\u002Fpython\u002Fst33",{"title":298,"path":299,"stem":300},"Динамическое программирование","\u002Fblog\u002Fpython\u002Fst34","blog\u002Fpython\u002Fst34",{"title":302,"path":303,"stem":304},"Алгоритм k ближайших соседей","\u002Fblog\u002Fpython\u002Fst35","blog\u002Fpython\u002Fst35",{"title":306,"path":307,"stem":308},"Типы данных","\u002Fblog\u002Fpython\u002Fst4","blog\u002Fpython\u002Fst4",{"title":310,"path":311,"stem":312},"О функциях","\u002Fblog\u002Fpython\u002Fst5","blog\u002Fpython\u002Fst5",{"title":314,"path":315,"stem":316},"Свойства и методы","\u002Fblog\u002Fpython\u002Fst6","blog\u002Fpython\u002Fst6",{"title":318,"path":319,"stem":320},"Определение функций","\u002Fblog\u002Fpython\u002Fst7","blog\u002Fpython\u002Fst7",{"title":322,"path":323,"stem":324},"Логика","\u002Fblog\u002Fpython\u002Fst8","blog\u002Fpython\u002Fst8",{"title":326,"path":327,"stem":328},"Циклы","\u002Fblog\u002Fpython\u002Fst9","blog\u002Fpython\u002Fst9",{"title":330,"path":331,"stem":332,"children":333,"page":114},"Toi","\u002Fblog\u002Ftoi","blog\u002Ftoi",[334,338,342,346,350,354,358,362,366,370,374,378,382],{"title":335,"path":336,"stem":337},"Информация и информационные процессы","\u002Fblog\u002Ftoi\u002Fst1","blog\u002Ftoi\u002Fst1",{"title":339,"path":340,"stem":341},"Электронные таблицы","\u002Fblog\u002Ftoi\u002Fst10","blog\u002Ftoi\u002Fst10",{"title":343,"path":344,"stem":345},"Система, её свойства и компоненты. Моделирование","\u002Fblog\u002Ftoi\u002Fst11","blog\u002Ftoi\u002Fst11",{"title":347,"path":348,"stem":349},"Представление информации в компьютере","\u002Fblog\u002Ftoi\u002Fst12","blog\u002Ftoi\u002Fst12",{"title":351,"path":352,"stem":353},"Средства информационно-коммуникационных технологий. Файловая система","\u002Fblog\u002Ftoi\u002Fst13","blog\u002Ftoi\u002Fst13",{"title":355,"path":356,"stem":357},"Комбинаторика","\u002Fblog\u002Ftoi\u002Fst2","blog\u002Ftoi\u002Fst2",{"title":359,"path":360,"stem":361},"Адресация в интернете","\u002Fblog\u002Ftoi\u002Fst3","blog\u002Ftoi\u002Fst3",{"title":363,"path":364,"stem":365},"Измерение количества информации","\u002Fblog\u002Ftoi\u002Fst4","blog\u002Ftoi\u002Fst4",{"title":367,"path":368,"stem":369},"Системы счисления","\u002Fblog\u002Ftoi\u002Fst5","blog\u002Ftoi\u002Fst5",{"title":371,"path":372,"stem":373},"Диаграммы Эйлера — Венна","\u002Fblog\u002Ftoi\u002Fst6","blog\u002Ftoi\u002Fst6",{"title":375,"path":376,"stem":377},"Условие Фано","\u002Fblog\u002Ftoi\u002Fst7","blog\u002Ftoi\u002Fst7",{"title":379,"path":380,"stem":381},"Теория графов","\u002Fblog\u002Ftoi\u002Fst8","blog\u002Ftoi\u002Fst8",{"title":383,"path":384,"stem":385},"Алгебра логики","\u002Fblog\u002Ftoi\u002Fst9","blog\u002Ftoi\u002Fst9",{"id":387,"title":222,"author":388,"body":393,"date":2486,"description":2487,"extension":2488,"image":2489,"meta":2490,"minRead":1979,"navigation":672,"num":1964,"path":223,"seo":2491,"stem":224,"__hash__":2492},"python\u002Fblog\u002Fpython\u002Fst17.md",{"name":389,"avatar":390},"Штана Альберт Игоревич",{"src":391,"alt":392},"me.jpg","@ashtana",{"type":394,"value":395,"toc":2468},"minimark",[396,400,405,409,414,417,434,437,450,589,592,603,606,629,634,637,809,813,816,889,892,895,963,966,1074,1077,1081,1084,1087,1190,1193,1197,1200,1203,1265,1268,1375,1379,1382,1432,1435,1480,1483,1535,1538,1576,1580,1583,1648,1651,1674,1677,1681,1684,1709,1713,1716,1790,1793,2075,2078,2139,2142,2197,2200,2204,2207,2270,2273,2373,2376,2449,2461,2464],[397,398,222],"h2",{"id":399},"использование-списков-ч3",[401,402,404],"h3",{"id":403},"срезы","Срезы",[406,407,408],"p",{},"Настало время перейти к очень интересному инструменту,\nкоторый Python предоставляет для работы с целыми подмножествами элементов списка - срезы(slices).",[410,411,413],"h4",{"id":412},"синтаксис-срезов","Синтаксис срезов",[406,415,416],{},"Срез записывается так же, как записывается обращение к элементу списка по индексу:",[418,419,424],"pre",{"className":420,"code":421,"language":422,"meta":423,"style":423},"language-markdown shiki shiki-themes github-light","some_list[START:STOP:STEP]\n","markdown","",[425,426,427],"code",{"__ignoreMap":423},[428,429,432],"span",{"class":430,"line":431},"line",1,[428,433,421],{},[406,435,436],{},"У среза три параметра:",[438,439,440,444,447],"ul",{},[441,442,443],"li",{},"START — индекс первого элемента в выборке",[441,445,446],{},"STOP — индекс элемента списка, перед которым срез должен закончиться. Сам элемент с индексом STOP не будет входить в выборку",[441,448,449],{},"STEP — шаг выбираемых индексов",[418,451,455],{"className":452,"code":453,"language":454,"meta":423,"style":423},"language-python shiki shiki-themes github-light","l = [1, 2, 3, 4, 5]\n# Срез от нулевого по четвёртый индекс с шагом 1\nslice = l[0:4:1]\nprint(slice)  # => [1, 2, 3, 4]\n# Срез от нулевого по четвёртый индекс с шагом 2\nslice = l[0:4:2]\nprint(slice)  # => [1, 3] \n","python",[425,456,457,498,505,531,548,554,575],{"__ignoreMap":423},[428,458,459,463,467,470,474,477,480,482,485,487,490,492,495],{"class":430,"line":431},[428,460,462],{"class":461},"sgsFI","l ",[428,464,466],{"class":465},"sD7c4","=",[428,468,469],{"class":461}," [",[428,471,473],{"class":472},"sYu0t","1",[428,475,476],{"class":461},", ",[428,478,479],{"class":472},"2",[428,481,476],{"class":461},[428,483,484],{"class":472},"3",[428,486,476],{"class":461},[428,488,489],{"class":472},"4",[428,491,476],{"class":461},[428,493,494],{"class":472},"5",[428,496,497],{"class":461},"]\n",[428,499,501],{"class":430,"line":500},2,[428,502,504],{"class":503},"sAwPA","# Срез от нулевого по четвёртый индекс с шагом 1\n",[428,506,508,511,514,517,520,523,525,527,529],{"class":430,"line":507},3,[428,509,510],{"class":472},"slice",[428,512,513],{"class":465}," =",[428,515,516],{"class":461}," l[",[428,518,519],{"class":472},"0",[428,521,522],{"class":461},":",[428,524,489],{"class":472},[428,526,522],{"class":461},[428,528,473],{"class":472},[428,530,497],{"class":461},[428,532,534,537,540,542,545],{"class":430,"line":533},4,[428,535,536],{"class":472},"print",[428,538,539],{"class":461},"(",[428,541,510],{"class":472},[428,543,544],{"class":461},")  ",[428,546,547],{"class":503},"# => [1, 2, 3, 4]\n",[428,549,551],{"class":430,"line":550},5,[428,552,553],{"class":503},"# Срез от нулевого по четвёртый индекс с шагом 2\n",[428,555,557,559,561,563,565,567,569,571,573],{"class":430,"line":556},6,[428,558,510],{"class":472},[428,560,513],{"class":465},[428,562,516],{"class":461},[428,564,519],{"class":472},[428,566,522],{"class":461},[428,568,489],{"class":472},[428,570,522],{"class":461},[428,572,479],{"class":472},[428,574,497],{"class":461},[428,576,578,580,582,584,586],{"class":430,"line":577},7,[428,579,536],{"class":472},[428,581,539],{"class":461},[428,583,510],{"class":472},[428,585,544],{"class":461},[428,587,588],{"class":503},"# => [1, 3]\n",[406,590,591],{},"При этом любой из трех параметров среза может быть пропущен и вместо соответствующего параметра будет значение по умолчанию:",[438,593,594,597,600],{},[441,595,596],{},"По умолчанию START означает «от начала списка».",[441,598,599],{},"По умолчанию STOP означает «до конца списка включительно».",[441,601,602],{},"По умолчанию STEP означает «брать каждый элемент».",[406,604,605],{},"Вот несколько примеров с разными наборами параметров:",[438,607,608,611,614,617,620,623,626],{},[441,609,610],{},"[:] или [::] — весь список.",[441,612,613],{},"[::2] — нечетные по порядку элементы.",[441,615,616],{},"[1::2] — четные по порядку элементы.",[441,618,619],{},"[::-1] — все элементы в обратном порядке.",[441,621,622],{},"[5:] — все элементы, начиная с шестого.",[441,624,625],{},"[:5] — все элементы, не доходя до шестого.",[441,627,628],{},"[-2:1:-1] — все элементы от предпоследнего до третьего в обратном порядке. Во всех случаях выборки от большего индекса к меньшему нужно указывать шаг.\nТеперь разберем как можно использовать срезы.",[630,631,633],"h5",{"id":632},"выборка-элементов","Выборка элементов",[406,635,636],{},"Срезы работают не только со списками, но и с кортежами, и даже со строками.\nРезультатом применения выборки всегда становится новое значение соответствующего типа — список, кортеж, строка:",[418,638,640],{"className":452,"code":639,"language":454,"meta":423,"style":423},"word = \"hello\"\nprint(word[3:])  # => lo\n\nuser_data = (\n    \"Alex\",\n    \"alex@example.com\",\n    \"student\",\n)\nprint(user_data[1::])  # ('alexn@example.com', 'student')\n\nnumbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\nprint(numbers[1::2])  # [2, 4, 6, 8, 10]\n",[425,641,642,653,668,674,684,692,699,706,712,728,733,788],{"__ignoreMap":423},[428,643,644,647,649],{"class":430,"line":431},[428,645,646],{"class":461},"word ",[428,648,466],{"class":465},[428,650,652],{"class":651},"sYBdl"," \"hello\"\n",[428,654,655,657,660,662,665],{"class":430,"line":500},[428,656,536],{"class":472},[428,658,659],{"class":461},"(word[",[428,661,484],{"class":472},[428,663,664],{"class":461},":])  ",[428,666,667],{"class":503},"# => lo\n",[428,669,670],{"class":430,"line":507},[428,671,673],{"emptyLinePlaceholder":672},true,"\n",[428,675,676,679,681],{"class":430,"line":533},[428,677,678],{"class":461},"user_data ",[428,680,466],{"class":465},[428,682,683],{"class":461}," (\n",[428,685,686,689],{"class":430,"line":550},[428,687,688],{"class":651},"    \"Alex\"",[428,690,691],{"class":461},",\n",[428,693,694,697],{"class":430,"line":556},[428,695,696],{"class":651},"    \"alex@example.com\"",[428,698,691],{"class":461},[428,700,701,704],{"class":430,"line":577},[428,702,703],{"class":651},"    \"student\"",[428,705,691],{"class":461},[428,707,709],{"class":430,"line":708},8,[428,710,711],{"class":461},")\n",[428,713,715,717,720,722,725],{"class":430,"line":714},9,[428,716,536],{"class":472},[428,718,719],{"class":461},"(user_data[",[428,721,473],{"class":472},[428,723,724],{"class":461},"::])  ",[428,726,727],{"class":503},"# ('alexn@example.com', 'student')\n",[428,729,731],{"class":430,"line":730},10,[428,732,673],{"emptyLinePlaceholder":672},[428,734,736,739,741,743,745,747,749,751,753,755,757,759,761,763,766,768,771,773,776,778,781,783,786],{"class":430,"line":735},11,[428,737,738],{"class":461},"numbers ",[428,740,466],{"class":465},[428,742,469],{"class":461},[428,744,473],{"class":472},[428,746,476],{"class":461},[428,748,479],{"class":472},[428,750,476],{"class":461},[428,752,484],{"class":472},[428,754,476],{"class":461},[428,756,489],{"class":472},[428,758,476],{"class":461},[428,760,494],{"class":472},[428,762,476],{"class":461},[428,764,765],{"class":472},"6",[428,767,476],{"class":461},[428,769,770],{"class":472},"7",[428,772,476],{"class":461},[428,774,775],{"class":472},"8",[428,777,476],{"class":461},[428,779,780],{"class":472},"9",[428,782,476],{"class":461},[428,784,785],{"class":472},"10",[428,787,497],{"class":461},[428,789,791,793,796,798,801,803,806],{"class":430,"line":790},12,[428,792,536],{"class":472},[428,794,795],{"class":461},"(numbers[",[428,797,473],{"class":472},[428,799,800],{"class":461},"::",[428,802,479],{"class":472},[428,804,805],{"class":461},"])  ",[428,807,808],{"class":503},"# [2, 4, 6, 8, 10]\n",[630,810,812],{"id":811},"присваивание-срезу","Присваивание срезу",[406,814,815],{},"В отличие от строк и кортежей списки могут изменяться.\nОдним из вариантов модификации является присваивание срезу.\nСрезу с указанным шагом можно присвоить список из новых элементов:",[418,817,819],{"className":452,"code":818,"language":454,"meta":423,"style":423},"l = [1, 2, 3, 4, 5, 6]\nl[::2] = [0, 0, 0]\nprint(l)  # => [0, 2, 0, 4, 0, 6]\n",[425,820,821,853,879],{"__ignoreMap":423},[428,822,823,825,827,829,831,833,835,837,839,841,843,845,847,849,851],{"class":430,"line":431},[428,824,462],{"class":461},[428,826,466],{"class":465},[428,828,469],{"class":461},[428,830,473],{"class":472},[428,832,476],{"class":461},[428,834,479],{"class":472},[428,836,476],{"class":461},[428,838,484],{"class":472},[428,840,476],{"class":461},[428,842,489],{"class":472},[428,844,476],{"class":461},[428,846,494],{"class":472},[428,848,476],{"class":461},[428,850,765],{"class":472},[428,852,497],{"class":461},[428,854,855,858,860,863,865,867,869,871,873,875,877],{"class":430,"line":500},[428,856,857],{"class":461},"l[::",[428,859,479],{"class":472},[428,861,862],{"class":461},"] ",[428,864,466],{"class":465},[428,866,469],{"class":461},[428,868,519],{"class":472},[428,870,476],{"class":461},[428,872,519],{"class":472},[428,874,476],{"class":461},[428,876,519],{"class":472},[428,878,497],{"class":461},[428,880,881,883,886],{"class":430,"line":507},[428,882,536],{"class":472},[428,884,885],{"class":461},"(l)  ",[428,887,888],{"class":503},"# => [0, 2, 0, 4, 0, 6]\n",[406,890,891],{},"Срез [::2] означает, что мы выбираем элементы с шагом 2, то есть берем каждый второй элемент.\nСписок [0, 0, 0] - это список, который мы присваиваем выбранным элементам.\nСрез l[::2] теперь содержит элементы с индексами 0, 2 и 4 (т.е. 1, 3 и 5).\nПрисваивание [0, 0, 0] этим элементам заменяет их на нули.\nВ результате изменения списка l становится равным [0, 2, 0, 4, 0, 6].",[406,893,894],{},"Если вы попробуете присвоить срезу с шагом неверное количество элементов, то получите ошибку:",[418,896,898],{"className":452,"code":897,"language":454,"meta":423,"style":423},"l = [1, 2, 3, 4]\nl[::2] = [5, 6, 7]\n# Traceback (most recent call last):\n#   File \"\u003Cstdin>\", line 1, in \u003Cmodule>\n# ValueError: attempt to assign sequence of size 3 to extended slice of size 2\n",[425,899,900,924,948,953,958],{"__ignoreMap":423},[428,901,902,904,906,908,910,912,914,916,918,920,922],{"class":430,"line":431},[428,903,462],{"class":461},[428,905,466],{"class":465},[428,907,469],{"class":461},[428,909,473],{"class":472},[428,911,476],{"class":461},[428,913,479],{"class":472},[428,915,476],{"class":461},[428,917,484],{"class":472},[428,919,476],{"class":461},[428,921,489],{"class":472},[428,923,497],{"class":461},[428,925,926,928,930,932,934,936,938,940,942,944,946],{"class":430,"line":500},[428,927,857],{"class":461},[428,929,479],{"class":472},[428,931,862],{"class":461},[428,933,466],{"class":465},[428,935,469],{"class":461},[428,937,494],{"class":472},[428,939,476],{"class":461},[428,941,765],{"class":472},[428,943,476],{"class":461},[428,945,770],{"class":472},[428,947,497],{"class":461},[428,949,950],{"class":430,"line":507},[428,951,952],{"class":503},"# Traceback (most recent call last):\n",[428,954,955],{"class":430,"line":533},[428,956,957],{"class":503},"#   File \"\u003Cstdin>\", line 1, in \u003Cmodule>\n",[428,959,960],{"class":430,"line":550},[428,961,962],{"class":503},"# ValueError: attempt to assign sequence of size 3 to extended slice of size 2\n",[406,964,965],{},"Если срез непрерывный, то есть шаг не указан и индексы идут подряд, то свободы нам дается больше.\nТакому срезу можно присвоить как больше элементов — тогда список вырастет, так и меньше, что приведет к урезанию списка:",[418,967,969],{"className":452,"code":968,"language":454,"meta":423,"style":423},"l = [1, 2, 3]\nl[2:] = [4, 5]\nprint(l)  # => [1, 2, 4, 5]\nl[1:-1] = [100]\nprint(l)  # => [1, 100, 5]\nl[:] = []\nprint(l)  # => []\n",[425,970,971,991,1013,1022,1046,1055,1065],{"__ignoreMap":423},[428,972,973,975,977,979,981,983,985,987,989],{"class":430,"line":431},[428,974,462],{"class":461},[428,976,466],{"class":465},[428,978,469],{"class":461},[428,980,473],{"class":472},[428,982,476],{"class":461},[428,984,479],{"class":472},[428,986,476],{"class":461},[428,988,484],{"class":472},[428,990,497],{"class":461},[428,992,993,996,998,1001,1003,1005,1007,1009,1011],{"class":430,"line":500},[428,994,995],{"class":461},"l[",[428,997,479],{"class":472},[428,999,1000],{"class":461},":] ",[428,1002,466],{"class":465},[428,1004,469],{"class":461},[428,1006,489],{"class":472},[428,1008,476],{"class":461},[428,1010,494],{"class":472},[428,1012,497],{"class":461},[428,1014,1015,1017,1019],{"class":430,"line":507},[428,1016,536],{"class":472},[428,1018,885],{"class":461},[428,1020,1021],{"class":503},"# => [1, 2, 4, 5]\n",[428,1023,1024,1026,1028,1030,1033,1035,1037,1039,1041,1044],{"class":430,"line":533},[428,1025,995],{"class":461},[428,1027,473],{"class":472},[428,1029,522],{"class":461},[428,1031,1032],{"class":465},"-",[428,1034,473],{"class":472},[428,1036,862],{"class":461},[428,1038,466],{"class":465},[428,1040,469],{"class":461},[428,1042,1043],{"class":472},"100",[428,1045,497],{"class":461},[428,1047,1048,1050,1052],{"class":430,"line":550},[428,1049,536],{"class":472},[428,1051,885],{"class":461},[428,1053,1054],{"class":503},"# => [1, 100, 5]\n",[428,1056,1057,1060,1062],{"class":430,"line":556},[428,1058,1059],{"class":461},"l[:] ",[428,1061,466],{"class":465},[428,1063,1064],{"class":461}," []\n",[428,1066,1067,1069,1071],{"class":430,"line":577},[428,1068,536],{"class":472},[428,1070,885],{"class":461},[428,1072,1073],{"class":503},"# => []\n",[406,1075,1076],{},"Сначала список растет, потом уменьшается, а под конец вообще становится пустым — и все с помощью компактного, но мощного синтаксиса срезов.",[630,1078,1080],{"id":1079},"срезы-значения","Срезы-значения",[406,1082,1083],{},"Хоть срезы и имеют специальную поддержку со стороны синтаксиса, но можно создавать и использовать срезы сами по себе — как обычные значения.",[406,1085,1086],{},"Значение среза можно сконструировать с помощью функции slice():",[418,1088,1090],{"className":452,"code":1089,"language":454,"meta":423,"style":423},"first_two = slice(2)\neach_odd = slice(None, None, 2)\nprint(each_odd)  # => slice(None, None, 2)\nl = [1, 2, 3, 4, 5]\nprint(l[first_two])  # => [1, 2]\nprint(l[each_odd])  # => [1, 3, 5]\n",[425,1091,1092,1108,1132,1142,1170,1180],{"__ignoreMap":423},[428,1093,1094,1097,1099,1102,1104,1106],{"class":430,"line":431},[428,1095,1096],{"class":461},"first_two ",[428,1098,466],{"class":465},[428,1100,1101],{"class":472}," slice",[428,1103,539],{"class":461},[428,1105,479],{"class":472},[428,1107,711],{"class":461},[428,1109,1110,1113,1115,1117,1119,1122,1124,1126,1128,1130],{"class":430,"line":500},[428,1111,1112],{"class":461},"each_odd ",[428,1114,466],{"class":465},[428,1116,1101],{"class":472},[428,1118,539],{"class":461},[428,1120,1121],{"class":472},"None",[428,1123,476],{"class":461},[428,1125,1121],{"class":472},[428,1127,476],{"class":461},[428,1129,479],{"class":472},[428,1131,711],{"class":461},[428,1133,1134,1136,1139],{"class":430,"line":507},[428,1135,536],{"class":472},[428,1137,1138],{"class":461},"(each_odd)  ",[428,1140,1141],{"class":503},"# => slice(None, None, 2)\n",[428,1143,1144,1146,1148,1150,1152,1154,1156,1158,1160,1162,1164,1166,1168],{"class":430,"line":533},[428,1145,462],{"class":461},[428,1147,466],{"class":465},[428,1149,469],{"class":461},[428,1151,473],{"class":472},[428,1153,476],{"class":461},[428,1155,479],{"class":472},[428,1157,476],{"class":461},[428,1159,484],{"class":472},[428,1161,476],{"class":461},[428,1163,489],{"class":472},[428,1165,476],{"class":461},[428,1167,494],{"class":472},[428,1169,497],{"class":461},[428,1171,1172,1174,1177],{"class":430,"line":550},[428,1173,536],{"class":472},[428,1175,1176],{"class":461},"(l[first_two])  ",[428,1178,1179],{"class":503},"# => [1, 2]\n",[428,1181,1182,1184,1187],{"class":430,"line":556},[428,1183,536],{"class":472},[428,1185,1186],{"class":461},"(l[each_odd])  ",[428,1188,1189],{"class":503},"# => [1, 3, 5]\n",[406,1191,1192],{},"Функция slice() принимает от одного до трех параметров — те самые START, STOP и STEP.\nПри вызове функции с одним параметром, функция вызывается с параметром STOP.\nЕсли необходимо пропустить один из параметров, то подставляется вместо него None.\nТакже None можно использовать и в записи срезов в квадратных скобках — там он так же будет означать пропуск значения.\nНа месте параметров среза могут быть любые выражения, лишь бы эти выражения вычислялись в целые числа или None.",[630,1194,1196],{"id":1195},"соотношение-start-и-stop","Соотношение start и stop",[406,1198,1199],{},"В срезе элемент с индексом STOP не включается в результат, в отличие от элемента с индексом START.",[406,1201,1202],{},"Эту особенность можно использовать, какой бы неотрицательный индекс n мы ни выбрали, для любого списка будет соблюдаться указанное равенство:",[418,1204,1206],{"className":452,"code":1205,"language":454,"meta":423,"style":423},"l = [1, 2, 3, 4, 5]\nn = 2\nl == l[:n] + l[n:]  # True\n",[425,1207,1208,1236,1246],{"__ignoreMap":423},[428,1209,1210,1212,1214,1216,1218,1220,1222,1224,1226,1228,1230,1232,1234],{"class":430,"line":431},[428,1211,462],{"class":461},[428,1213,466],{"class":465},[428,1215,469],{"class":461},[428,1217,473],{"class":472},[428,1219,476],{"class":461},[428,1221,479],{"class":472},[428,1223,476],{"class":461},[428,1225,484],{"class":472},[428,1227,476],{"class":461},[428,1229,489],{"class":472},[428,1231,476],{"class":461},[428,1233,494],{"class":472},[428,1235,497],{"class":461},[428,1237,1238,1241,1243],{"class":430,"line":500},[428,1239,1240],{"class":461},"n ",[428,1242,466],{"class":465},[428,1244,1245],{"class":472}," 2\n",[428,1247,1248,1250,1253,1256,1259,1262],{"class":430,"line":507},[428,1249,462],{"class":461},[428,1251,1252],{"class":465},"==",[428,1254,1255],{"class":461}," l[:n] ",[428,1257,1258],{"class":465},"+",[428,1260,1261],{"class":461}," l[n:]  ",[428,1263,1264],{"class":503},"# True\n",[406,1266,1267],{},"Ещё пример:",[418,1269,1271],{"className":452,"code":1270,"language":454,"meta":423,"style":423},"word = \"Hello!\"\nprint(word[:2] + word[2:])  # => 'Hello!'\nprint(word[:4] + word[4:])  # => 'Hello!'\nprint(word[:0] + word[0:] == word)  # => True\nprint(word[:100] + word[100:] == word)  # => True\n",[425,1272,1273,1282,1305,1325,1351],{"__ignoreMap":423},[428,1274,1275,1277,1279],{"class":430,"line":431},[428,1276,646],{"class":461},[428,1278,466],{"class":465},[428,1280,1281],{"class":651}," \"Hello!\"\n",[428,1283,1284,1286,1289,1291,1293,1295,1298,1300,1302],{"class":430,"line":500},[428,1285,536],{"class":472},[428,1287,1288],{"class":461},"(word[:",[428,1290,479],{"class":472},[428,1292,862],{"class":461},[428,1294,1258],{"class":465},[428,1296,1297],{"class":461}," word[",[428,1299,479],{"class":472},[428,1301,664],{"class":461},[428,1303,1304],{"class":503},"# => 'Hello!'\n",[428,1306,1307,1309,1311,1313,1315,1317,1319,1321,1323],{"class":430,"line":507},[428,1308,536],{"class":472},[428,1310,1288],{"class":461},[428,1312,489],{"class":472},[428,1314,862],{"class":461},[428,1316,1258],{"class":465},[428,1318,1297],{"class":461},[428,1320,489],{"class":472},[428,1322,664],{"class":461},[428,1324,1304],{"class":503},[428,1326,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1348],{"class":430,"line":533},[428,1328,536],{"class":472},[428,1330,1288],{"class":461},[428,1332,519],{"class":472},[428,1334,862],{"class":461},[428,1336,1258],{"class":465},[428,1338,1297],{"class":461},[428,1340,519],{"class":472},[428,1342,1000],{"class":461},[428,1344,1252],{"class":465},[428,1346,1347],{"class":461}," word)  ",[428,1349,1350],{"class":503},"# => True\n",[428,1352,1353,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373],{"class":430,"line":550},[428,1354,536],{"class":472},[428,1356,1288],{"class":461},[428,1358,1043],{"class":472},[428,1360,862],{"class":461},[428,1362,1258],{"class":465},[428,1364,1297],{"class":461},[428,1366,1043],{"class":472},[428,1368,1000],{"class":461},[428,1370,1252],{"class":465},[428,1372,1347],{"class":461},[428,1374,1350],{"class":503},[401,1376,1378],{"id":1377},"destructuring","Destructuring",[406,1380,1381],{},"Destructuring – синтаксическая возможность \"раскладывать\" элементы списка (и не только) в отдельные переменные.\nДеструктуризация относится к необязательным, но очень приятным возможностям языка.\nПредставьте, что у нас есть список из двух элементов, которыми мы хотим оперировать в нашей программе.\nСамый простой вариант использования его элементов — постоянное обращение по индексу point[0] и point[1].",[418,1383,1385],{"className":452,"code":1384,"language":454,"meta":423,"style":423},"point = [1, 1]\nprint(f`{point[0]}:{point[1]}`) # => 1:2\n",[425,1386,1387,1404],{"__ignoreMap":423},[428,1388,1389,1392,1394,1396,1398,1400,1402],{"class":430,"line":431},[428,1390,1391],{"class":461},"point ",[428,1393,466],{"class":465},[428,1395,469],{"class":461},[428,1397,473],{"class":472},[428,1399,476],{"class":461},[428,1401,473],{"class":472},[428,1403,497],{"class":461},[428,1405,1406,1408,1411,1415,1418,1421,1423,1426,1429],{"class":430,"line":500},[428,1407,536],{"class":472},[428,1409,1410],{"class":461},"(f",[428,1412,1414],{"class":1413},"sB1qb","`{point[",[428,1416,519],{"class":1417},"sdV6q",[428,1419,1420],{"class":1413},"]}:{point[",[428,1422,473],{"class":1417},[428,1424,1425],{"class":1413},"]}`",[428,1427,1428],{"class":461},") ",[428,1430,1431],{"class":503},"# => 1:2\n",[406,1433,1434],{},"Индексы ничего не говорят о содержимом, и для понимания этого кода придется прикладывать дополнительные усилия.\nГораздо лучше сначала присвоить эти значения переменным с хорошими именами. Тогда код станет читаемым:",[418,1436,1438],{"className":452,"code":1437,"language":454,"meta":423,"style":423},"x = point[0]\ny = point[1]\nprint(f`{x}:{y}`) # => 1:2\n",[425,1439,1440,1454,1467],{"__ignoreMap":423},[428,1441,1442,1445,1447,1450,1452],{"class":430,"line":431},[428,1443,1444],{"class":461},"x ",[428,1446,466],{"class":465},[428,1448,1449],{"class":461}," point[",[428,1451,519],{"class":472},[428,1453,497],{"class":461},[428,1455,1456,1459,1461,1463,1465],{"class":430,"line":500},[428,1457,1458],{"class":461},"y ",[428,1460,466],{"class":465},[428,1462,1449],{"class":461},[428,1464,473],{"class":472},[428,1466,497],{"class":461},[428,1468,1469,1471,1473,1476,1478],{"class":430,"line":507},[428,1470,536],{"class":472},[428,1472,1410],{"class":461},[428,1474,1475],{"class":1413},"`{x}:{y}`",[428,1477,1428],{"class":461},[428,1479,1431],{"class":503},[406,1481,1482],{},"Код стал значительно понятнее, хотя и длиннее. С помощью деструктуризации то же самое можно сделать короче:",[418,1484,1486],{"className":452,"code":1485,"language":454,"meta":423,"style":423},"[x, y] = point\n# Слева список повторяет структуру правого списка\n# но вместо значений используются идентификаторы\n# они заполняются значениями, стоящими на тех же позициях в правом списке\n# [x, y] = [1, 2]\n# x = 1, y = 2\nprint(f`{x}:{y}`) # => 1:2\n",[425,1487,1488,1498,1503,1508,1513,1518,1523],{"__ignoreMap":423},[428,1489,1490,1493,1495],{"class":430,"line":431},[428,1491,1492],{"class":461},"[x, y] ",[428,1494,466],{"class":465},[428,1496,1497],{"class":461}," point\n",[428,1499,1500],{"class":430,"line":500},[428,1501,1502],{"class":503},"# Слева список повторяет структуру правого списка\n",[428,1504,1505],{"class":430,"line":507},[428,1506,1507],{"class":503},"# но вместо значений используются идентификаторы\n",[428,1509,1510],{"class":430,"line":533},[428,1511,1512],{"class":503},"# они заполняются значениями, стоящими на тех же позициях в правом списке\n",[428,1514,1515],{"class":430,"line":550},[428,1516,1517],{"class":503},"# [x, y] = [1, 2]\n",[428,1519,1520],{"class":430,"line":556},[428,1521,1522],{"class":503},"# x = 1, y = 2\n",[428,1524,1525,1527,1529,1531,1533],{"class":430,"line":577},[428,1526,536],{"class":472},[428,1528,1410],{"class":461},[428,1530,1475],{"class":1413},[428,1532,1428],{"class":461},[428,1534,1431],{"class":503},[406,1536,1537],{},"Деструктуризация работает на любом уровне вложенности.\nНапример, с ее помощью можно извлекать данные из списков внутри списков:",[418,1539,1541],{"className":452,"code":1540,"language":454,"meta":423,"style":423},"[one, [two, three]] = [1, [2, 3]]\nprint(one, two, three)  # => 1 2 3\n",[425,1542,1543,1566],{"__ignoreMap":423},[428,1544,1545,1548,1550,1552,1554,1557,1559,1561,1563],{"class":430,"line":431},[428,1546,1547],{"class":461},"[one, [two, three]] ",[428,1549,466],{"class":465},[428,1551,469],{"class":461},[428,1553,473],{"class":472},[428,1555,1556],{"class":461},", [",[428,1558,479],{"class":472},[428,1560,476],{"class":461},[428,1562,484],{"class":472},[428,1564,1565],{"class":461},"]]\n",[428,1567,1568,1570,1573],{"class":430,"line":500},[428,1569,536],{"class":472},[428,1571,1572],{"class":461},"(one, two, three)  ",[428,1574,1575],{"class":503},"# => 1 2 3\n",[410,1577,1579],{"id":1578},"деструктуризация-в-циклах","Деструктуризация в циклах",[406,1581,1582],{},"Разложение списка можно использовать не только как отдельную инструкцию в коде, но и в циклах:",[418,1584,1586],{"className":452,"code":1585,"language":454,"meta":423,"style":423},"points = [[1, 2], [0, -1]]\nfor x, y in points:\n    print([x, y])\n# => [1, 2]\n# => [0, -1]\n",[425,1587,1588,1617,1631,1639,1643],{"__ignoreMap":423},[428,1589,1590,1593,1595,1598,1600,1602,1604,1607,1609,1611,1613,1615],{"class":430,"line":431},[428,1591,1592],{"class":461},"points ",[428,1594,466],{"class":465},[428,1596,1597],{"class":461}," [[",[428,1599,473],{"class":472},[428,1601,476],{"class":461},[428,1603,479],{"class":472},[428,1605,1606],{"class":461},"], [",[428,1608,519],{"class":472},[428,1610,476],{"class":461},[428,1612,1032],{"class":465},[428,1614,473],{"class":472},[428,1616,1565],{"class":461},[428,1618,1619,1622,1625,1628],{"class":430,"line":500},[428,1620,1621],{"class":465},"for",[428,1623,1624],{"class":461}," x, y ",[428,1626,1627],{"class":465},"in",[428,1629,1630],{"class":461}," points:\n",[428,1632,1633,1636],{"class":430,"line":507},[428,1634,1635],{"class":472},"    print",[428,1637,1638],{"class":461},"([x, y])\n",[428,1640,1641],{"class":430,"line":533},[428,1642,1179],{"class":503},[428,1644,1645],{"class":430,"line":550},[428,1646,1647],{"class":503},"# => [0, -1]\n",[406,1649,1650],{},"В этом примере каждый элемент в цикле является списком. Без деструктуризации цикл выглядит так:",[418,1652,1654],{"className":452,"code":1653,"language":454,"meta":423,"style":423},"for item in points:\n    print(item)\n",[425,1655,1656,1667],{"__ignoreMap":423},[428,1657,1658,1660,1663,1665],{"class":430,"line":431},[428,1659,1621],{"class":465},[428,1661,1662],{"class":461}," item ",[428,1664,1627],{"class":465},[428,1666,1630],{"class":461},[428,1668,1669,1671],{"class":430,"line":500},[428,1670,1635],{"class":472},[428,1672,1673],{"class":461},"(item)\n",[406,1675,1676],{},"Внутри for переменная item - это список, поэтому вместо нее можно подставить деструктуризацию [x, y].",[410,1678,1680],{"id":1679},"деструктуризация-строк","Деструктуризация строк",[406,1682,1683],{},"В python строки ведут себя подобно спискам и их также можно деструктурировать.",[418,1685,1687],{"className":452,"code":1686,"language":454,"meta":423,"style":423},"[first, second, third] = \"two\"\nprint(first)  # => 't'\n",[425,1688,1689,1699],{"__ignoreMap":423},[428,1690,1691,1694,1696],{"class":430,"line":431},[428,1692,1693],{"class":461},"[first, second, third] ",[428,1695,466],{"class":465},[428,1697,1698],{"class":651}," \"two\"\n",[428,1700,1701,1703,1706],{"class":430,"line":500},[428,1702,536],{"class":472},[428,1704,1705],{"class":461},"(first)  ",[428,1707,1708],{"class":503},"# => 't'\n",[401,1710,1712],{"id":1711},"оператор-упаковки","Оператор упаковки",[406,1714,1715],{},"Мощь деструктуризации больше всего проявляется там, где она используется вместе с синтаксисом упаковки-распаковки.\nОператор * (в Python у него нет фиксированного названия, но часто используют \"оператор распаковки\u002Fупаковки аргументов\") позволяет \"свернуть\" часть элементов во время деструктуризации.\nНапример, с его помощью можно разложить список на первый элемент и все остальные:",[418,1717,1719],{"className":452,"code":1718,"language":454,"meta":423,"style":423},"fruits = [\"apple\", \"orange\", \"banana\", \"pineapple\"]\n# Разделяем первый элемент и оставшиеся элементы\nfirst, *rest = fruits\nprint(first)  # => 'apple'\nprint(rest)  # => ['orange', 'banana', 'pineapple']\n",[425,1720,1721,1750,1755,1771,1780],{"__ignoreMap":423},[428,1722,1723,1726,1728,1730,1733,1735,1738,1740,1743,1745,1748],{"class":430,"line":431},[428,1724,1725],{"class":461},"fruits ",[428,1727,466],{"class":465},[428,1729,469],{"class":461},[428,1731,1732],{"class":651},"\"apple\"",[428,1734,476],{"class":461},[428,1736,1737],{"class":651},"\"orange\"",[428,1739,476],{"class":461},[428,1741,1742],{"class":651},"\"banana\"",[428,1744,476],{"class":461},[428,1746,1747],{"class":651},"\"pineapple\"",[428,1749,497],{"class":461},[428,1751,1752],{"class":430,"line":500},[428,1753,1754],{"class":503},"# Разделяем первый элемент и оставшиеся элементы\n",[428,1756,1757,1760,1763,1766,1768],{"class":430,"line":507},[428,1758,1759],{"class":461},"first, ",[428,1761,1762],{"class":465},"*",[428,1764,1765],{"class":461},"rest ",[428,1767,466],{"class":465},[428,1769,1770],{"class":461}," fruits\n",[428,1772,1773,1775,1777],{"class":430,"line":533},[428,1774,536],{"class":472},[428,1776,1705],{"class":461},[428,1778,1779],{"class":503},"# => 'apple'\n",[428,1781,1782,1784,1787],{"class":430,"line":550},[428,1783,536],{"class":472},[428,1785,1786],{"class":461},"(rest)  ",[428,1788,1789],{"class":503},"# => ['orange', 'banana', 'pineapple']\n",[406,1791,1792],{},"Запись *rest означает, что нужно взять все элементы, которые остались от деструктуризации и поместить их в список с именем rest.\nЭтому списку можно дать любое имя. Упаковка срабатывает в самом конце, когда все остальные данные уже разложены по своим переменным.\nИменно поэтому мы и назвали список rest, оставшиеся.\nПодобным образом любой список раскладывается на любое количество элементов + остальные.",[418,1794,1796],{"className":452,"code":1795,"language":454,"meta":423,"style":423},"# Исходный список\nfruits = [\"apple\", \"orange\", \"banana\", \"pineapple\"]\nhead, *tail = fruits\nprint(head)  # => 'apple'\nprint(tail)  # => ['orange', 'banana', 'pineapple']\n# Первый, второй и оставшиеся элементы\nfirst, second, *rest = fruits\nprint(first)  # => 'apple'\nprint(second)  # => 'orange'\nprint(rest)  # => ['banana', 'pineapple']\n# Если элементов нет, то rest окажется пустым списком\nfirst, second, third, one_more, *rest = fruits\nprint(first)  # => 'apple'\nprint(second)  # => 'orange'\nprint(third)  # => 'banana'\nprint(one_more)  # => 'pineapple'\nprint(rest)  # => []\n# Пропуск элемента\nfirst, _, third, *rest = fruits\nprint(first)  # => 'apple'\nprint(third)  # => 'banana'\nprint(rest)  # => ['pineapple']\n# Также можно упаковывать элементы в любом месте списка\n# Первый, последний и оставшиеся центральные элементы\nfirst, *mid, last = fruits\nprint(first)  # => 'apple'\nprint(last)  # => 'pineapple'\nprint(mid)  # => ['orange', 'banana']\n",[425,1797,1798,1803,1827,1841,1850,1859,1864,1877,1885,1895,1904,1909,1922,1931,1940,1951,1962,1971,1977,1991,2000,2009,2019,2025,2031,2045,2054,2064],{"__ignoreMap":423},[428,1799,1800],{"class":430,"line":431},[428,1801,1802],{"class":503},"# Исходный список\n",[428,1804,1805,1807,1809,1811,1813,1815,1817,1819,1821,1823,1825],{"class":430,"line":500},[428,1806,1725],{"class":461},[428,1808,466],{"class":465},[428,1810,469],{"class":461},[428,1812,1732],{"class":651},[428,1814,476],{"class":461},[428,1816,1737],{"class":651},[428,1818,476],{"class":461},[428,1820,1742],{"class":651},[428,1822,476],{"class":461},[428,1824,1747],{"class":651},[428,1826,497],{"class":461},[428,1828,1829,1832,1834,1837,1839],{"class":430,"line":507},[428,1830,1831],{"class":461},"head, ",[428,1833,1762],{"class":465},[428,1835,1836],{"class":461},"tail ",[428,1838,466],{"class":465},[428,1840,1770],{"class":461},[428,1842,1843,1845,1848],{"class":430,"line":533},[428,1844,536],{"class":472},[428,1846,1847],{"class":461},"(head)  ",[428,1849,1779],{"class":503},[428,1851,1852,1854,1857],{"class":430,"line":550},[428,1853,536],{"class":472},[428,1855,1856],{"class":461},"(tail)  ",[428,1858,1789],{"class":503},[428,1860,1861],{"class":430,"line":556},[428,1862,1863],{"class":503},"# Первый, второй и оставшиеся элементы\n",[428,1865,1866,1869,1871,1873,1875],{"class":430,"line":577},[428,1867,1868],{"class":461},"first, second, ",[428,1870,1762],{"class":465},[428,1872,1765],{"class":461},[428,1874,466],{"class":465},[428,1876,1770],{"class":461},[428,1878,1879,1881,1883],{"class":430,"line":708},[428,1880,536],{"class":472},[428,1882,1705],{"class":461},[428,1884,1779],{"class":503},[428,1886,1887,1889,1892],{"class":430,"line":714},[428,1888,536],{"class":472},[428,1890,1891],{"class":461},"(second)  ",[428,1893,1894],{"class":503},"# => 'orange'\n",[428,1896,1897,1899,1901],{"class":430,"line":730},[428,1898,536],{"class":472},[428,1900,1786],{"class":461},[428,1902,1903],{"class":503},"# => ['banana', 'pineapple']\n",[428,1905,1906],{"class":430,"line":735},[428,1907,1908],{"class":503},"# Если элементов нет, то rest окажется пустым списком\n",[428,1910,1911,1914,1916,1918,1920],{"class":430,"line":790},[428,1912,1913],{"class":461},"first, second, third, one_more, ",[428,1915,1762],{"class":465},[428,1917,1765],{"class":461},[428,1919,466],{"class":465},[428,1921,1770],{"class":461},[428,1923,1925,1927,1929],{"class":430,"line":1924},13,[428,1926,536],{"class":472},[428,1928,1705],{"class":461},[428,1930,1779],{"class":503},[428,1932,1934,1936,1938],{"class":430,"line":1933},14,[428,1935,536],{"class":472},[428,1937,1891],{"class":461},[428,1939,1894],{"class":503},[428,1941,1943,1945,1948],{"class":430,"line":1942},15,[428,1944,536],{"class":472},[428,1946,1947],{"class":461},"(third)  ",[428,1949,1950],{"class":503},"# => 'banana'\n",[428,1952,1954,1956,1959],{"class":430,"line":1953},16,[428,1955,536],{"class":472},[428,1957,1958],{"class":461},"(one_more)  ",[428,1960,1961],{"class":503},"# => 'pineapple'\n",[428,1963,1965,1967,1969],{"class":430,"line":1964},17,[428,1966,536],{"class":472},[428,1968,1786],{"class":461},[428,1970,1073],{"class":503},[428,1972,1974],{"class":430,"line":1973},18,[428,1975,1976],{"class":503},"# Пропуск элемента\n",[428,1978,1980,1983,1985,1987,1989],{"class":430,"line":1979},19,[428,1981,1982],{"class":461},"first, _, third, ",[428,1984,1762],{"class":465},[428,1986,1765],{"class":461},[428,1988,466],{"class":465},[428,1990,1770],{"class":461},[428,1992,1994,1996,1998],{"class":430,"line":1993},20,[428,1995,536],{"class":472},[428,1997,1705],{"class":461},[428,1999,1779],{"class":503},[428,2001,2003,2005,2007],{"class":430,"line":2002},21,[428,2004,536],{"class":472},[428,2006,1947],{"class":461},[428,2008,1950],{"class":503},[428,2010,2012,2014,2016],{"class":430,"line":2011},22,[428,2013,536],{"class":472},[428,2015,1786],{"class":461},[428,2017,2018],{"class":503},"# => ['pineapple']\n",[428,2020,2022],{"class":430,"line":2021},23,[428,2023,2024],{"class":503},"# Также можно упаковывать элементы в любом месте списка\n",[428,2026,2028],{"class":430,"line":2027},24,[428,2029,2030],{"class":503},"# Первый, последний и оставшиеся центральные элементы\n",[428,2032,2034,2036,2038,2041,2043],{"class":430,"line":2033},25,[428,2035,1759],{"class":461},[428,2037,1762],{"class":465},[428,2039,2040],{"class":461},"mid, last ",[428,2042,466],{"class":465},[428,2044,1770],{"class":461},[428,2046,2048,2050,2052],{"class":430,"line":2047},26,[428,2049,536],{"class":472},[428,2051,1705],{"class":461},[428,2053,1779],{"class":503},[428,2055,2057,2059,2062],{"class":430,"line":2056},27,[428,2058,536],{"class":472},[428,2060,2061],{"class":461},"(last)  ",[428,2063,1961],{"class":503},[428,2065,2067,2069,2072],{"class":430,"line":2066},28,[428,2068,536],{"class":472},[428,2070,2071],{"class":461},"(mid)  ",[428,2073,2074],{"class":503},"# => ['orange', 'banana']\n",[406,2076,2077],{},"В ситуациях, когда нас интересует только часть списка, но не важны первые элементы, лучше воспользоваться срезом:",[418,2079,2081],{"className":452,"code":2080,"language":454,"meta":423,"style":423},"# Исходный список\nfruits = [\"apple\", \"orange\", \"banana\", \"pineapple\"]\n# Срез списка, начиная с элемента с индексом 1\nrest = fruits[1:]\nprint(rest)  # ['orange', 'banana', 'pineapple']\n",[425,2082,2083,2087,2111,2116,2130],{"__ignoreMap":423},[428,2084,2085],{"class":430,"line":431},[428,2086,1802],{"class":503},[428,2088,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109],{"class":430,"line":500},[428,2090,1725],{"class":461},[428,2092,466],{"class":465},[428,2094,469],{"class":461},[428,2096,1732],{"class":651},[428,2098,476],{"class":461},[428,2100,1737],{"class":651},[428,2102,476],{"class":461},[428,2104,1742],{"class":651},[428,2106,476],{"class":461},[428,2108,1747],{"class":651},[428,2110,497],{"class":461},[428,2112,2113],{"class":430,"line":507},[428,2114,2115],{"class":503},"# Срез списка, начиная с элемента с индексом 1\n",[428,2117,2118,2120,2122,2125,2127],{"class":430,"line":533},[428,2119,1765],{"class":461},[428,2121,466],{"class":465},[428,2123,2124],{"class":461}," fruits[",[428,2126,473],{"class":472},[428,2128,2129],{"class":461},":]\n",[428,2131,2132,2134,2136],{"class":430,"line":550},[428,2133,536],{"class":472},[428,2135,1786],{"class":461},[428,2137,2138],{"class":503},"# ['orange', 'banana', 'pineapple']\n",[406,2140,2141],{},"Синтаксис упаковки можно применять также и при деструктуризации строк.",[418,2143,2145],{"className":452,"code":2144,"language":454,"meta":423,"style":423},"string = \"some string\"\nfirst, second, *rest = string\nprint(first)  # => 's'\nprint(second)  # => 'o'\nprint(rest)  # => ['m', 'e', ' ', 's', 't', 'r', 'i', 'n', 'g']\n",[425,2146,2147,2157,2170,2179,2188],{"__ignoreMap":423},[428,2148,2149,2152,2154],{"class":430,"line":431},[428,2150,2151],{"class":461},"string ",[428,2153,466],{"class":465},[428,2155,2156],{"class":651}," \"some string\"\n",[428,2158,2159,2161,2163,2165,2167],{"class":430,"line":500},[428,2160,1868],{"class":461},[428,2162,1762],{"class":465},[428,2164,1765],{"class":461},[428,2166,466],{"class":465},[428,2168,2169],{"class":461}," string\n",[428,2171,2172,2174,2176],{"class":430,"line":507},[428,2173,536],{"class":472},[428,2175,1705],{"class":461},[428,2177,2178],{"class":503},"# => 's'\n",[428,2180,2181,2183,2185],{"class":430,"line":533},[428,2182,536],{"class":472},[428,2184,1891],{"class":461},[428,2186,2187],{"class":503},"# => 'o'\n",[428,2189,2190,2192,2194],{"class":430,"line":550},[428,2191,536],{"class":472},[428,2193,1786],{"class":461},[428,2195,2196],{"class":503},"# => ['m', 'e', ' ', 's', 't', 'r', 'i', 'n', 'g']\n",[406,2198,2199],{},"Обратите внимание, что после упаковки оставшейся части строки в rest мы получаем список, а не строку.\nДеструктуризация в Python позволяет эффективно разделять элементы коллекций на отдельные переменные и собирать оставшиеся элементы в список с помощью синтаксиса оператора упаковки аргументов - *.\nЭто удобно для работы с данными, когда нужно отделить часть элементов от остальных.\nСинтаксис * можно использовать для разделения коллекций на фиксированное количество элементов и оставшиеся.",[401,2201,2203],{"id":2202},"оператор-распаковки","Оператор распаковки",[406,2205,2206],{},"У оператора упаковки есть вторая функциональность - распаковка. Она имеет такой же синтаксис, но выполняет противоположную задачу: не сворачивает элементы, а наоборот, растягивает их.\nС ее помощью обычно копируют или соединяют списки.\nПредставьте, что нам нужно определить список, добавив туда элементы из другого списка.\nТакая задача часто встречается при работе со значениями по умолчанию:",[418,2208,2210],{"className":452,"code":2209,"language":454,"meta":423,"style":423},"# Исходные списки\nfrench_cities = [\"paris\", \"marseille\"]\ncities = [\"milan\", \"rome\", *french_cities]\nprint(cities)  # => ['milan', 'rome', 'paris', 'marseille']\n",[425,2211,2212,2217,2236,2260],{"__ignoreMap":423},[428,2213,2214],{"class":430,"line":431},[428,2215,2216],{"class":503},"# Исходные списки\n",[428,2218,2219,2222,2224,2226,2229,2231,2234],{"class":430,"line":500},[428,2220,2221],{"class":461},"french_cities ",[428,2223,466],{"class":465},[428,2225,469],{"class":461},[428,2227,2228],{"class":651},"\"paris\"",[428,2230,476],{"class":461},[428,2232,2233],{"class":651},"\"marseille\"",[428,2235,497],{"class":461},[428,2237,2238,2241,2243,2245,2248,2250,2253,2255,2257],{"class":430,"line":507},[428,2239,2240],{"class":461},"cities ",[428,2242,466],{"class":465},[428,2244,469],{"class":461},[428,2246,2247],{"class":651},"\"milan\"",[428,2249,476],{"class":461},[428,2251,2252],{"class":651},"\"rome\"",[428,2254,476],{"class":461},[428,2256,1762],{"class":465},[428,2258,2259],{"class":461},"french_cities]\n",[428,2261,2262,2264,2267],{"class":430,"line":533},[428,2263,536],{"class":472},[428,2265,2266],{"class":461},"(cities)  ",[428,2268,2269],{"class":503},"# => ['milan', 'rome', 'paris', 'marseille']\n",[406,2271,2272],{},"В этом случае * — это распаковка. Оператор растянул список, добавив все его элементы в новый список.\nКак понять какая функциональность используется? Все дело в контексте использования.\nЕсли * появляется слева от знака равно, то происходит упаковка в переменные.\nЕсли * стоит справа от знака равно, то происходит упаковка в список.",[418,2274,2276],{"className":452,"code":2275,"language":454,"meta":423,"style":423},"# Исходные списки\nfrench_cities = [\"paris\", \"marseille\"]\ncities = [*french_cities, \"milan\", \"rome\"]\nprint(cities)  # => ['paris', 'marseille', 'milan', 'rome']\nfrench_cities = [\"paris\", \"marseille\"]\ncities = [\"milan\", *french_cities, \"rome\"]\nprint(cities)  # => ['milan', 'paris', 'marseille', 'rome']\n",[425,2277,2278,2282,2298,2319,2328,2344,2364],{"__ignoreMap":423},[428,2279,2280],{"class":430,"line":431},[428,2281,2216],{"class":503},[428,2283,2284,2286,2288,2290,2292,2294,2296],{"class":430,"line":500},[428,2285,2221],{"class":461},[428,2287,466],{"class":465},[428,2289,469],{"class":461},[428,2291,2228],{"class":651},[428,2293,476],{"class":461},[428,2295,2233],{"class":651},[428,2297,497],{"class":461},[428,2299,2300,2302,2304,2306,2308,2311,2313,2315,2317],{"class":430,"line":507},[428,2301,2240],{"class":461},[428,2303,466],{"class":465},[428,2305,469],{"class":461},[428,2307,1762],{"class":465},[428,2309,2310],{"class":461},"french_cities, ",[428,2312,2247],{"class":651},[428,2314,476],{"class":461},[428,2316,2252],{"class":651},[428,2318,497],{"class":461},[428,2320,2321,2323,2325],{"class":430,"line":533},[428,2322,536],{"class":472},[428,2324,2266],{"class":461},[428,2326,2327],{"class":503},"# => ['paris', 'marseille', 'milan', 'rome']\n",[428,2329,2330,2332,2334,2336,2338,2340,2342],{"class":430,"line":550},[428,2331,2221],{"class":461},[428,2333,466],{"class":465},[428,2335,469],{"class":461},[428,2337,2228],{"class":651},[428,2339,476],{"class":461},[428,2341,2233],{"class":651},[428,2343,497],{"class":461},[428,2345,2346,2348,2350,2352,2354,2356,2358,2360,2362],{"class":430,"line":556},[428,2347,2240],{"class":461},[428,2349,466],{"class":465},[428,2351,469],{"class":461},[428,2353,2247],{"class":651},[428,2355,476],{"class":461},[428,2357,1762],{"class":465},[428,2359,2310],{"class":461},[428,2361,2252],{"class":651},[428,2363,497],{"class":461},[428,2365,2366,2368,2370],{"class":430,"line":577},[428,2367,536],{"class":472},[428,2369,2266],{"class":461},[428,2371,2372],{"class":503},"# => ['milan', 'paris', 'marseille', 'rome']\n",[406,2374,2375],{},"* работает с любым количеством списков:",[418,2377,2379],{"className":452,"code":2378,"language":454,"meta":423,"style":423},"# Исходные списки\nfrench_cities = [\"paris\", \"marseille\"]\nitalian_cities = [\"rome\", \"milan\"]\n# Объединение списков с использованием *\ncities = [*french_cities, *italian_cities]\nprint(cities)  # ['paris', 'marseille', 'rome', 'milan']\n",[425,2380,2381,2385,2401,2418,2423,2440],{"__ignoreMap":423},[428,2382,2383],{"class":430,"line":431},[428,2384,2216],{"class":503},[428,2386,2387,2389,2391,2393,2395,2397,2399],{"class":430,"line":500},[428,2388,2221],{"class":461},[428,2390,466],{"class":465},[428,2392,469],{"class":461},[428,2394,2228],{"class":651},[428,2396,476],{"class":461},[428,2398,2233],{"class":651},[428,2400,497],{"class":461},[428,2402,2403,2406,2408,2410,2412,2414,2416],{"class":430,"line":507},[428,2404,2405],{"class":461},"italian_cities ",[428,2407,466],{"class":465},[428,2409,469],{"class":461},[428,2411,2252],{"class":651},[428,2413,476],{"class":461},[428,2415,2247],{"class":651},[428,2417,497],{"class":461},[428,2419,2420],{"class":430,"line":533},[428,2421,2422],{"class":503},"# Объединение списков с использованием *\n",[428,2424,2425,2427,2429,2431,2433,2435,2437],{"class":430,"line":550},[428,2426,2240],{"class":461},[428,2428,466],{"class":465},[428,2430,469],{"class":461},[428,2432,1762],{"class":465},[428,2434,2310],{"class":461},[428,2436,1762],{"class":465},[428,2438,2439],{"class":461},"italian_cities]\n",[428,2441,2442,2444,2446],{"class":430,"line":556},[428,2443,536],{"class":472},[428,2445,2266],{"class":461},[428,2447,2448],{"class":503},"# ['paris', 'marseille', 'rome', 'milan']\n",[406,2450,2451,2452,2456,2457,2460],{},"Попробуйте сами запустить код в окне ниже с интерпретатором Python и повторите примеры из статьи чтобы самим увидеть и понять как всё это работает.\nДля этого в ячейке с кодом нажмите клавиши на клавиатуре ",[2453,2454,2455],"strong",{},"Shift+Enter"," или запустите код через ",[2453,2458,2459],{},"кнопку Run"," по значку ▶.",[2462,2463],"jypiter",{},[2465,2466,2467],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sB1qb, html code.shiki .sB1qb{--shiki-default:#B31D28;--shiki-default-font-style:italic}html pre.shiki code .sdV6q, html code.shiki .sdV6q{--shiki-default:#005CC5;--shiki-default-font-style:italic}",{"title":423,"searchDepth":500,"depth":550,"links":2469},[2470],{"id":399,"depth":500,"text":222,"children":2471},[2472,2480,2484,2485],{"id":403,"depth":507,"text":404,"children":2473},[2474],{"id":412,"depth":533,"text":413,"children":2475},[2476,2477,2478,2479],{"id":632,"depth":550,"text":633},{"id":811,"depth":550,"text":812},{"id":1079,"depth":550,"text":1080},{"id":1195,"depth":550,"text":1196},{"id":1377,"depth":507,"text":1378,"children":2481},[2482,2483],{"id":1578,"depth":533,"text":1579},{"id":1679,"depth":533,"text":1680},{"id":1711,"depth":507,"text":1712},{"id":2202,"depth":507,"text":2203},"2025-04-26","Срезы, де-структуризация списков. Операторы упаковки и распаковки","md","images\u002Fblog\u002Fpython\u002Fst17\u002Fimg.png",{},{"title":222,"description":2487},"9ddkRIBcrpXCG-Eco4EHr2p4K8qqSro4USjjKW3C_1s",[2494,2496],{"title":218,"path":219,"stem":220,"description":2495,"children":-1},"Генерация строки в цикле. Обработка строк через преобразование в список. Вложенные циклы",{"title":226,"path":227,"stem":228,"description":2497,"children":-1},"Синтаксис. Изменение данных в словаре. Инициализация новых значений",1780737509484]