[{"data":1,"prerenderedAt":1746},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fpython\u002Fst16":386,"\u002Fblog\u002Fpython\u002Fst16-surround":1741},[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":218,"author":388,"body":393,"date":1734,"description":1735,"extension":1736,"image":1737,"meta":1738,"minRead":639,"navigation":453,"num":1666,"path":219,"seo":1739,"stem":220,"__hash__":1740},"python\u002Fblog\u002Fpython\u002Fst16.md",{"name":389,"avatar":390},"Штана Альберт Игоревич",{"src":391,"alt":392},"me.jpg","@ashtana",{"type":394,"value":395,"toc":1727},"minimark",[396,400,405,409,468,471,484,643,650,764,767,776,779,834,837,913,916,919,1050,1053,1188,1192,1195,1198,1221,1224,1235,1242,1292,1295,1393,1397,1400,1549,1552,1555,1708,1720,1723],[397,398,218],"h2",{"id":399},"использование-списков-ч2",[401,402,404],"h3",{"id":403},"генерация-строки-в-цикле","Генерация строки в цикле",[406,407,408],"p",{},"Генерация строк в циклах — задача, часто возникающая на практике.\nТипичный пример — функция, помогающая генерировать HTML-списки.\nОна принимает на вход коллекцию элементов и возвращает HTML-список из них:",[410,411,416],"pre",{"className":412,"code":413,"language":414,"meta":415,"style":415},"language-python shiki shiki-themes github-light","coll = ['milk', 'butter']\n\nbuild_HTML_list(coll)\n# \u003Cul>\u003Cli>milk\u003C\u002Fli>\u003Cli>butter\u003C\u002Fli>\u003C\u002Ful>\n","python","",[417,418,419,448,455,461],"code",{"__ignoreMap":415},[420,421,424,428,432,435,439,442,445],"span",{"class":422,"line":423},"line",1,[420,425,427],{"class":426},"sgsFI","coll ",[420,429,431],{"class":430},"sD7c4","=",[420,433,434],{"class":426}," [",[420,436,438],{"class":437},"sYBdl","'milk'",[420,440,441],{"class":426},", ",[420,443,444],{"class":437},"'butter'",[420,446,447],{"class":426},"]\n",[420,449,451],{"class":422,"line":450},2,[420,452,454],{"emptyLinePlaceholder":453},true,"\n",[420,456,458],{"class":422,"line":457},3,[420,459,460],{"class":426},"build_HTML_list(coll)\n",[420,462,464],{"class":422,"line":463},4,[420,465,467],{"class":466},"sAwPA","# \u003Cul>\u003Cli>milk\u003C\u002Fli>\u003Cli>butter\u003C\u002Fli>\u003C\u002Ful>\n",[406,469,470],{},"Как можно решить эту задачу в лоб:",[472,473,474,478,481],"ol",{},[475,476,477],"li",{},"Создать переменную result и записать в нее \u003Cul>.",[475,479,480],{},"Пройтись циклом по элементам коллекции и дописать в результирующую строку очередной элемент \u003Cli>.",[475,482,483],{},"Добавить в конце \u003C\u002Ful> и вернуть result из функции.",[410,485,487],{"className":412,"code":486,"language":414,"meta":415,"style":415},"def build_HTML_list(coll):\n  result = '\u003Cul>'\n  for item in coll:\n    result = f'{result}\u003Cli>{item}\u003C\u002Fli>'\n    # либо так: result += '\u003Cli>{item}\u003C\u002Fli>'\n  result = f'{result}\u003C\u002Ful>'\n\n  return result\n\ncoll = ['milk', 'butter']\n\nprint(build_HTML_list(coll))\n# => \u003Cul>\u003Cli>milk\u003C\u002Fli>\u003Cli>butter\u003C\u002Fli>\u003C\u002Ful>\n",[417,488,489,501,511,525,561,567,587,592,601,606,623,628,637],{"__ignoreMap":415},[420,490,491,494,498],{"class":422,"line":423},[420,492,493],{"class":430},"def",[420,495,497],{"class":496},"s7eDp"," build_HTML_list",[420,499,500],{"class":426},"(coll):\n",[420,502,503,506,508],{"class":422,"line":450},[420,504,505],{"class":426},"  result ",[420,507,431],{"class":430},[420,509,510],{"class":437}," '\u003Cul>'\n",[420,512,513,516,519,522],{"class":422,"line":457},[420,514,515],{"class":430},"  for",[420,517,518],{"class":426}," item ",[420,520,521],{"class":430},"in",[420,523,524],{"class":426}," coll:\n",[420,526,527,530,532,535,538,542,545,548,551,553,556,558],{"class":422,"line":463},[420,528,529],{"class":426},"    result ",[420,531,431],{"class":430},[420,533,534],{"class":430}," f",[420,536,537],{"class":437},"'",[420,539,541],{"class":540},"sYu0t","{",[420,543,544],{"class":426},"result",[420,546,547],{"class":540},"}",[420,549,550],{"class":437},"\u003Cli>",[420,552,541],{"class":540},[420,554,555],{"class":426},"item",[420,557,547],{"class":540},[420,559,560],{"class":437},"\u003C\u002Fli>'\n",[420,562,564],{"class":422,"line":563},5,[420,565,566],{"class":466},"    # либо так: result += '\u003Cli>{item}\u003C\u002Fli>'\n",[420,568,570,572,574,576,578,580,582,584],{"class":422,"line":569},6,[420,571,505],{"class":426},[420,573,431],{"class":430},[420,575,534],{"class":430},[420,577,537],{"class":437},[420,579,541],{"class":540},[420,581,544],{"class":426},[420,583,547],{"class":540},[420,585,586],{"class":437},"\u003C\u002Ful>'\n",[420,588,590],{"class":422,"line":589},7,[420,591,454],{"emptyLinePlaceholder":453},[420,593,595,598],{"class":422,"line":594},8,[420,596,597],{"class":430},"  return",[420,599,600],{"class":426}," result\n",[420,602,604],{"class":422,"line":603},9,[420,605,454],{"emptyLinePlaceholder":453},[420,607,609,611,613,615,617,619,621],{"class":422,"line":608},10,[420,610,427],{"class":426},[420,612,431],{"class":430},[420,614,434],{"class":426},[420,616,438],{"class":437},[420,618,441],{"class":426},[420,620,444],{"class":437},[420,622,447],{"class":426},[420,624,626],{"class":422,"line":625},11,[420,627,454],{"emptyLinePlaceholder":453},[420,629,631,634],{"class":422,"line":630},12,[420,632,633],{"class":540},"print",[420,635,636],{"class":426},"(build_HTML_list(coll))\n",[420,638,640],{"class":422,"line":639},13,[420,641,642],{"class":466},"# => \u003Cul>\u003Cli>milk\u003C\u002Fli>\u003Cli>butter\u003C\u002Fli>\u003C\u002Ful>\n",[406,644,645,646,649],{},"Такой способ вполне рабочий, но для большинства языков программирования максимально неэффективный.\nДело в том, что конкатенация и интерполяция порождают новую строчку вместо старой.\nПодобная ситуация повторяется на каждой итерации. Причем строка становится все больше и больше.\nКопирование строк приводит к серьезному расходу памяти и может влиять на производительность.\nКонечно, для большинства приложений данная проблема неактуальна из-за малого объема прогоняемых данных, но более эффективный подход не сложнее в реализации и обладает рядом плюсов.\nПоэтому стоит сразу приучить себя работать правильно.\nПравильно, в случае с динамическими языками – формировать список, который затем с помощью метода ",[417,647,648],{},"join()"," можно превратить в строку:",[410,651,653],{"className":412,"code":652,"language":414,"meta":415,"style":415},"def build_HTML_list(coll):\n  parts = []\n  for item in coll:\n    parts.append(f'\u003Cli>{item}\u003C\u002Fli>')\n\n  # Метод join объединяет элементы списка в строку\n  # В качестве разделителя между значениями\n  # используется значение строки\n  inner_value = ''.join(parts)\n  result = f'\u003Cul>{inner_value}\u003C\u002Ful>'\n  return result\n",[417,654,655,663,673,683,706,710,715,720,725,738,758],{"__ignoreMap":415},[420,656,657,659,661],{"class":422,"line":423},[420,658,493],{"class":430},[420,660,497],{"class":496},[420,662,500],{"class":426},[420,664,665,668,670],{"class":422,"line":450},[420,666,667],{"class":426},"  parts ",[420,669,431],{"class":430},[420,671,672],{"class":426}," []\n",[420,674,675,677,679,681],{"class":422,"line":457},[420,676,515],{"class":430},[420,678,518],{"class":426},[420,680,521],{"class":430},[420,682,524],{"class":426},[420,684,685,688,691,694,696,698,700,703],{"class":422,"line":463},[420,686,687],{"class":426},"    parts.append(",[420,689,690],{"class":430},"f",[420,692,693],{"class":437},"'\u003Cli>",[420,695,541],{"class":540},[420,697,555],{"class":426},[420,699,547],{"class":540},[420,701,702],{"class":437},"\u003C\u002Fli>'",[420,704,705],{"class":426},")\n",[420,707,708],{"class":422,"line":563},[420,709,454],{"emptyLinePlaceholder":453},[420,711,712],{"class":422,"line":569},[420,713,714],{"class":466},"  # Метод join объединяет элементы списка в строку\n",[420,716,717],{"class":422,"line":589},[420,718,719],{"class":466},"  # В качестве разделителя между значениями\n",[420,721,722],{"class":422,"line":594},[420,723,724],{"class":466},"  # используется значение строки\n",[420,726,727,730,732,735],{"class":422,"line":603},[420,728,729],{"class":426},"  inner_value ",[420,731,431],{"class":430},[420,733,734],{"class":437}," ''",[420,736,737],{"class":426},".join(parts)\n",[420,739,740,742,744,746,749,751,754,756],{"class":422,"line":608},[420,741,505],{"class":426},[420,743,431],{"class":430},[420,745,534],{"class":430},[420,747,748],{"class":437},"'\u003Cul>",[420,750,541],{"class":540},[420,752,753],{"class":426},"inner_value",[420,755,547],{"class":540},[420,757,586],{"class":437},[420,759,760,762],{"class":422,"line":625},[420,761,597],{"class":430},[420,763,600],{"class":426},[406,765,766],{},"Размер кода практически не изменился, но способ формирования результата стал другим.\nВместо строки, сначала собирается список, который затем превращается в строку с помощью метода .join().\nУ такого подхода есть и дополнительные плюсы:2222",[768,769,770,773],"ul",{},[475,771,772],{},"Такой код проще отлаживать.",[475,774,775],{},"Данные, представленные списком, легче вычленять визуально и программно.",[406,777,778],{},"Список — это структура, с ним можно производить дополнительные манипуляции. С готовой строкой уже ничего особо не сделать.\nРегулируя разделитель, строки можно объединять разными способами. Например, через запятую с пробелом:",[410,780,782],{"className":412,"code":781,"language":414,"meta":415,"style":415},"parts = ['python', 'PHP', 'Python']\noutput = ', '.join(parts)\n\nprint(output) # => python, PHP, Python\n",[417,783,784,808,820,824],{"__ignoreMap":415},[420,785,786,789,791,793,796,798,801,803,806],{"class":422,"line":423},[420,787,788],{"class":426},"parts ",[420,790,431],{"class":430},[420,792,434],{"class":426},[420,794,795],{"class":437},"'python'",[420,797,441],{"class":426},[420,799,800],{"class":437},"'PHP'",[420,802,441],{"class":426},[420,804,805],{"class":437},"'Python'",[420,807,447],{"class":426},[420,809,810,813,815,818],{"class":422,"line":450},[420,811,812],{"class":426},"output ",[420,814,431],{"class":430},[420,816,817],{"class":437}," ', '",[420,819,737],{"class":426},[420,821,822],{"class":422,"line":457},[420,823,454],{"emptyLinePlaceholder":453},[420,825,826,828,831],{"class":422,"line":463},[420,827,633],{"class":540},[420,829,830],{"class":426},"(output) ",[420,832,833],{"class":466},"# => python, PHP, Python\n",[406,835,836],{},"Если каждое слово надо вывести на новой строчке, то в качестве разделителя используем символ перевода строки '\\n':",[410,838,840],{"className":412,"code":839,"language":414,"meta":415,"style":415},"parts = ['python', 'PHP', 'Python']\n\n# Теперь каждое слово будет начинаться с новой строки\noutput = '\\n'.join(parts)\n\nprint(output)\n# => python\n# => PHP\n# => Python\n",[417,841,842,862,866,871,887,891,898,903,908],{"__ignoreMap":415},[420,843,844,846,848,850,852,854,856,858,860],{"class":422,"line":423},[420,845,788],{"class":426},[420,847,431],{"class":430},[420,849,434],{"class":426},[420,851,795],{"class":437},[420,853,441],{"class":426},[420,855,800],{"class":437},[420,857,441],{"class":426},[420,859,805],{"class":437},[420,861,447],{"class":426},[420,863,864],{"class":422,"line":450},[420,865,454],{"emptyLinePlaceholder":453},[420,867,868],{"class":422,"line":457},[420,869,870],{"class":466},"# Теперь каждое слово будет начинаться с новой строки\n",[420,872,873,875,877,880,883,885],{"class":422,"line":463},[420,874,812],{"class":426},[420,876,431],{"class":430},[420,878,879],{"class":437}," '",[420,881,882],{"class":540},"\\n",[420,884,537],{"class":437},[420,886,737],{"class":426},[420,888,889],{"class":422,"line":563},[420,890,454],{"emptyLinePlaceholder":453},[420,892,893,895],{"class":422,"line":569},[420,894,633],{"class":540},[420,896,897],{"class":426},"(output)\n",[420,899,900],{"class":422,"line":589},[420,901,902],{"class":466},"# => python\n",[420,904,905],{"class":422,"line":594},[420,906,907],{"class":466},"# => PHP\n",[420,909,910],{"class":422,"line":603},[420,911,912],{"class":466},"# => Python\n",[406,914,915],{},"Последний пример особенно важен.\nНовички часто допускают ошибку и добавляют перевод строки в момент формирования списка, а не в join().\nПосмотрите на пример с нашей функцией build_HTML_list().",[406,917,918],{},"Правильно:",[410,920,922],{"className":412,"code":921,"language":414,"meta":415,"style":415},"def build_HTML_list(coll):\n  parts = []\n  for item in coll:\n    parts.append(f'\u003Cli>{item}\u003C\u002Fli>')\n  inner_value = '\\n'.join(parts) # перевод строки\n  result = f'\u003Cul>{inner_value}\u003C\u002Ful>'\n  return result\n\ncoll = ['milk', 'butter']\n\nprint(build_HTML_list(coll))\n# \u003Cul>\u003Cli>milk\u003C\u002Fli>\n# \u003Cli>butter\u003C\u002Fli>\u003C\u002Ful>\n",[417,923,924,932,940,950,968,986,1004,1010,1014,1030,1034,1040,1045],{"__ignoreMap":415},[420,925,926,928,930],{"class":422,"line":423},[420,927,493],{"class":430},[420,929,497],{"class":496},[420,931,500],{"class":426},[420,933,934,936,938],{"class":422,"line":450},[420,935,667],{"class":426},[420,937,431],{"class":430},[420,939,672],{"class":426},[420,941,942,944,946,948],{"class":422,"line":457},[420,943,515],{"class":430},[420,945,518],{"class":426},[420,947,521],{"class":430},[420,949,524],{"class":426},[420,951,952,954,956,958,960,962,964,966],{"class":422,"line":463},[420,953,687],{"class":426},[420,955,690],{"class":430},[420,957,693],{"class":437},[420,959,541],{"class":540},[420,961,555],{"class":426},[420,963,547],{"class":540},[420,965,702],{"class":437},[420,967,705],{"class":426},[420,969,970,972,974,976,978,980,983],{"class":422,"line":563},[420,971,729],{"class":426},[420,973,431],{"class":430},[420,975,879],{"class":437},[420,977,882],{"class":540},[420,979,537],{"class":437},[420,981,982],{"class":426},".join(parts) ",[420,984,985],{"class":466},"# перевод строки\n",[420,987,988,990,992,994,996,998,1000,1002],{"class":422,"line":569},[420,989,505],{"class":426},[420,991,431],{"class":430},[420,993,534],{"class":430},[420,995,748],{"class":437},[420,997,541],{"class":540},[420,999,753],{"class":426},[420,1001,547],{"class":540},[420,1003,586],{"class":437},[420,1005,1006,1008],{"class":422,"line":589},[420,1007,597],{"class":430},[420,1009,600],{"class":426},[420,1011,1012],{"class":422,"line":594},[420,1013,454],{"emptyLinePlaceholder":453},[420,1015,1016,1018,1020,1022,1024,1026,1028],{"class":422,"line":603},[420,1017,427],{"class":426},[420,1019,431],{"class":430},[420,1021,434],{"class":426},[420,1023,438],{"class":437},[420,1025,441],{"class":426},[420,1027,444],{"class":437},[420,1029,447],{"class":426},[420,1031,1032],{"class":422,"line":608},[420,1033,454],{"emptyLinePlaceholder":453},[420,1035,1036,1038],{"class":422,"line":625},[420,1037,633],{"class":540},[420,1039,636],{"class":426},[420,1041,1042],{"class":422,"line":630},[420,1043,1044],{"class":466},"# \u003Cul>\u003Cli>milk\u003C\u002Fli>\n",[420,1046,1047],{"class":422,"line":639},[420,1048,1049],{"class":466},"# \u003Cli>butter\u003C\u002Fli>\u003C\u002Ful>\n",[406,1051,1052],{},"Неправильно:",[410,1054,1056],{"className":412,"code":1055,"language":414,"meta":415,"style":415},"def build_HTML_list(coll):\n  parts = []\n  for item in coll:\n    parts.append(f'\\n\u003Cli>{item}\u003C\u002Fli>')\n  inner_value = ''.join(parts) # разделителя нет\n  result = f'\u003Cul>{inner_value}\u003C\u002Ful>'\n  return result\n\ncoll = ['milk', 'butter']\n\nprint(build_HTML_list(coll))\n# \u003Cul>\n# \u003Cli>milk\u003C\u002Fli>\n# \u003Cli>butter\u003C\u002Fli>\u003C\u002Ful>\n",[417,1057,1058,1066,1074,1084,1106,1119,1137,1143,1147,1163,1167,1173,1178,1183],{"__ignoreMap":415},[420,1059,1060,1062,1064],{"class":422,"line":423},[420,1061,493],{"class":430},[420,1063,497],{"class":496},[420,1065,500],{"class":426},[420,1067,1068,1070,1072],{"class":422,"line":450},[420,1069,667],{"class":426},[420,1071,431],{"class":430},[420,1073,672],{"class":426},[420,1075,1076,1078,1080,1082],{"class":422,"line":457},[420,1077,515],{"class":430},[420,1079,518],{"class":426},[420,1081,521],{"class":430},[420,1083,524],{"class":426},[420,1085,1086,1088,1090,1092,1094,1096,1098,1100,1102,1104],{"class":422,"line":463},[420,1087,687],{"class":426},[420,1089,690],{"class":430},[420,1091,537],{"class":437},[420,1093,882],{"class":540},[420,1095,550],{"class":437},[420,1097,541],{"class":540},[420,1099,555],{"class":426},[420,1101,547],{"class":540},[420,1103,702],{"class":437},[420,1105,705],{"class":426},[420,1107,1108,1110,1112,1114,1116],{"class":422,"line":563},[420,1109,729],{"class":426},[420,1111,431],{"class":430},[420,1113,734],{"class":437},[420,1115,982],{"class":426},[420,1117,1118],{"class":466},"# разделителя нет\n",[420,1120,1121,1123,1125,1127,1129,1131,1133,1135],{"class":422,"line":569},[420,1122,505],{"class":426},[420,1124,431],{"class":430},[420,1126,534],{"class":430},[420,1128,748],{"class":437},[420,1130,541],{"class":540},[420,1132,753],{"class":426},[420,1134,547],{"class":540},[420,1136,586],{"class":437},[420,1138,1139,1141],{"class":422,"line":589},[420,1140,597],{"class":430},[420,1142,600],{"class":426},[420,1144,1145],{"class":422,"line":594},[420,1146,454],{"emptyLinePlaceholder":453},[420,1148,1149,1151,1153,1155,1157,1159,1161],{"class":422,"line":603},[420,1150,427],{"class":426},[420,1152,431],{"class":430},[420,1154,434],{"class":426},[420,1156,438],{"class":437},[420,1158,441],{"class":426},[420,1160,444],{"class":437},[420,1162,447],{"class":426},[420,1164,1165],{"class":422,"line":608},[420,1166,454],{"emptyLinePlaceholder":453},[420,1168,1169,1171],{"class":422,"line":625},[420,1170,633],{"class":540},[420,1172,636],{"class":426},[420,1174,1175],{"class":422,"line":630},[420,1176,1177],{"class":466},"# \u003Cul>\n",[420,1179,1180],{"class":422,"line":639},[420,1181,1182],{"class":466},"# \u003Cli>milk\u003C\u002Fli>\n",[420,1184,1186],{"class":422,"line":1185},14,[420,1187,1049],{"class":466},[401,1189,1191],{"id":1190},"обработка-строк-через-преобразование-в-список","Обработка строк через преобразование в список",[406,1193,1194],{},"На собеседованиях часто задают подобные задачки:",[406,1196,1197],{},"Дана строка текста. Нужно сделать заглавной первую букву каждого слова в тексте.\nДля простоты считаем что мы работаем с текстом, который не содержит знаков препинания:",[410,1199,1201],{"className":412,"code":1200,"language":414,"meta":415,"style":415},"text = 'hello python'\ncapitalize_words(text) # 'Hello Python'\n",[417,1202,1203,1213],{"__ignoreMap":415},[420,1204,1205,1208,1210],{"class":422,"line":423},[420,1206,1207],{"class":426},"text ",[420,1209,431],{"class":430},[420,1211,1212],{"class":437}," 'hello python'\n",[420,1214,1215,1218],{"class":422,"line":450},[420,1216,1217],{"class":426},"capitalize_words(text) ",[420,1219,1220],{"class":466},"# 'Hello Python'\n",[406,1222,1223],{},"Решить ее можно многими способами. Чем больше называет человек — тем лучше. К ним относятся:",[472,1225,1226,1229,1232],{},[475,1227,1228],{},"Посимвольный перебор строки",[475,1230,1231],{},"Через преобразование в список",[475,1233,1234],{},"Регулярные выражения",[406,1236,1237,1238,1241],{},"Разберем решение через список. Для этого воспользуемся методом строки ",[417,1239,1240],{},"split()",", который разделяет строку на части:",[410,1243,1245],{"className":412,"code":1244,"language":414,"meta":415,"style":415},"def capitalize_words(sentence):\n  # Определяем разделитель — пробел\n  separator = ' '\n  # split разделяет строку по указанному разделителю\n  words = sentence.split(separator)\n  # ...\n",[417,1246,1247,1257,1262,1272,1277,1287],{"__ignoreMap":415},[420,1248,1249,1251,1254],{"class":422,"line":423},[420,1250,493],{"class":430},[420,1252,1253],{"class":496}," capitalize_words",[420,1255,1256],{"class":426},"(sentence):\n",[420,1258,1259],{"class":422,"line":450},[420,1260,1261],{"class":466},"  # Определяем разделитель — пробел\n",[420,1263,1264,1267,1269],{"class":422,"line":457},[420,1265,1266],{"class":426},"  separator ",[420,1268,431],{"class":430},[420,1270,1271],{"class":437}," ' '\n",[420,1273,1274],{"class":422,"line":463},[420,1275,1276],{"class":466},"  # split разделяет строку по указанному разделителю\n",[420,1278,1279,1282,1284],{"class":422,"line":563},[420,1280,1281],{"class":426},"  words ",[420,1283,431],{"class":430},[420,1285,1286],{"class":426}," sentence.split(separator)\n",[420,1288,1289],{"class":422,"line":569},[420,1290,1291],{"class":466},"  # ...\n",[406,1293,1294],{},"Следующим шагом нужно пройтись по списку получившихся слов и преобразовать первую букву каждого слова к верхнему регистру.",[410,1296,1298],{"className":412,"code":1297,"language":414,"meta":415,"style":415},"def capitalize_words(sentence):\n  separator = ' '\n  words = sentence.split(separator)\n  # Формируем список обработанных слов\n  capitalized_words = []\n  for word in words:\n    capitalized_words.append(word.capitalize())\n\n  # Соединяем обработанные слова обратно в предложение\n  return separator.join(capitalized_words)\n\ntext = 'hello python'\nprint(capitalize_words(text)) # => Hello Python\n",[417,1299,1300,1308,1316,1324,1329,1338,1350,1355,1359,1364,1371,1375,1383],{"__ignoreMap":415},[420,1301,1302,1304,1306],{"class":422,"line":423},[420,1303,493],{"class":430},[420,1305,1253],{"class":496},[420,1307,1256],{"class":426},[420,1309,1310,1312,1314],{"class":422,"line":450},[420,1311,1266],{"class":426},[420,1313,431],{"class":430},[420,1315,1271],{"class":437},[420,1317,1318,1320,1322],{"class":422,"line":457},[420,1319,1281],{"class":426},[420,1321,431],{"class":430},[420,1323,1286],{"class":426},[420,1325,1326],{"class":422,"line":463},[420,1327,1328],{"class":466},"  # Формируем список обработанных слов\n",[420,1330,1331,1334,1336],{"class":422,"line":563},[420,1332,1333],{"class":426},"  capitalized_words ",[420,1335,431],{"class":430},[420,1337,672],{"class":426},[420,1339,1340,1342,1345,1347],{"class":422,"line":569},[420,1341,515],{"class":430},[420,1343,1344],{"class":426}," word ",[420,1346,521],{"class":430},[420,1348,1349],{"class":426}," words:\n",[420,1351,1352],{"class":422,"line":589},[420,1353,1354],{"class":426},"    capitalized_words.append(word.capitalize())\n",[420,1356,1357],{"class":422,"line":594},[420,1358,454],{"emptyLinePlaceholder":453},[420,1360,1361],{"class":422,"line":603},[420,1362,1363],{"class":466},"  # Соединяем обработанные слова обратно в предложение\n",[420,1365,1366,1368],{"class":422,"line":608},[420,1367,597],{"class":430},[420,1369,1370],{"class":426}," separator.join(capitalized_words)\n",[420,1372,1373],{"class":422,"line":625},[420,1374,454],{"emptyLinePlaceholder":453},[420,1376,1377,1379,1381],{"class":422,"line":630},[420,1378,1207],{"class":426},[420,1380,431],{"class":430},[420,1382,1212],{"class":437},[420,1384,1385,1387,1390],{"class":422,"line":639},[420,1386,633],{"class":540},[420,1388,1389],{"class":426},"(capitalize_words(text)) ",[420,1391,1392],{"class":466},"# => Hello Python\n",[401,1394,1396],{"id":1395},"вложенные-циклы","Вложенные циклы",[406,1398,1399],{},"Во многих языках программирования есть очень полезная функция flatten.\nВ определенных задачах она сильно упрощает жизнь и сокращает количество кода.\nЭта функция принимает на вход список и выпрямляет его: если элементами списка являются списки, то flatten сводит все к одному списку, раскрывая каждый вложенный.\nРеализуем эту функцию самостоятельно. В общем случае эта функция раскрывает списки на всех уровнях вложенности.\nНо мы для простоты сделаем вариант функции, в котором происходит раскрытие только до первого уровня.\nТо есть, если элемент основного списка — список, то он раскрывается без просмотра его внутренностей (там тоже могут быть списки).\nЛогика работы функции выглядит так:",[410,1401,1403],{"className":412,"code":1402,"language":414,"meta":415,"style":415},"def flatten(coll):\n    result = []\n    for item in coll:\n        # Функция isinstance проверяет является ли item типом данных список\n        if isinstance(item, list):\n            for sub_item in item:\n                result.append(sub_item)\n        else:\n            result.append(item)\n    return result\n\nprint(flatten([3, 2, [], [3, 4, 2], 3, [123, 3]]))\n# => [ 3, 2, 3, 4, 2, 3, 123, 3 ]\n",[417,1404,1405,1414,1422,1433,1438,1455,1468,1473,1481,1486,1493,1497,1544],{"__ignoreMap":415},[420,1406,1407,1409,1412],{"class":422,"line":423},[420,1408,493],{"class":430},[420,1410,1411],{"class":496}," flatten",[420,1413,500],{"class":426},[420,1415,1416,1418,1420],{"class":422,"line":450},[420,1417,529],{"class":426},[420,1419,431],{"class":430},[420,1421,672],{"class":426},[420,1423,1424,1427,1429,1431],{"class":422,"line":457},[420,1425,1426],{"class":430},"    for",[420,1428,518],{"class":426},[420,1430,521],{"class":430},[420,1432,524],{"class":426},[420,1434,1435],{"class":422,"line":463},[420,1436,1437],{"class":466},"        # Функция isinstance проверяет является ли item типом данных список\n",[420,1439,1440,1443,1446,1449,1452],{"class":422,"line":563},[420,1441,1442],{"class":430},"        if",[420,1444,1445],{"class":540}," isinstance",[420,1447,1448],{"class":426},"(item, ",[420,1450,1451],{"class":540},"list",[420,1453,1454],{"class":426},"):\n",[420,1456,1457,1460,1463,1465],{"class":422,"line":569},[420,1458,1459],{"class":430},"            for",[420,1461,1462],{"class":426}," sub_item ",[420,1464,521],{"class":430},[420,1466,1467],{"class":426}," item:\n",[420,1469,1470],{"class":422,"line":589},[420,1471,1472],{"class":426},"                result.append(sub_item)\n",[420,1474,1475,1478],{"class":422,"line":594},[420,1476,1477],{"class":430},"        else",[420,1479,1480],{"class":426},":\n",[420,1482,1483],{"class":422,"line":603},[420,1484,1485],{"class":426},"            result.append(item)\n",[420,1487,1488,1491],{"class":422,"line":608},[420,1489,1490],{"class":430},"    return",[420,1492,600],{"class":426},[420,1494,1495],{"class":422,"line":625},[420,1496,454],{"emptyLinePlaceholder":453},[420,1498,1499,1501,1504,1507,1509,1512,1515,1517,1519,1522,1524,1526,1529,1531,1534,1537,1539,1541],{"class":422,"line":630},[420,1500,633],{"class":540},[420,1502,1503],{"class":426},"(flatten([",[420,1505,1506],{"class":540},"3",[420,1508,441],{"class":426},[420,1510,1511],{"class":540},"2",[420,1513,1514],{"class":426},", [], [",[420,1516,1506],{"class":540},[420,1518,441],{"class":426},[420,1520,1521],{"class":540},"4",[420,1523,441],{"class":426},[420,1525,1511],{"class":540},[420,1527,1528],{"class":426},"], ",[420,1530,1506],{"class":540},[420,1532,1533],{"class":426},", [",[420,1535,1536],{"class":540},"123",[420,1538,441],{"class":426},[420,1540,1506],{"class":540},[420,1542,1543],{"class":426},"]]))\n",[420,1545,1546],{"class":422,"line":639},[420,1547,1548],{"class":466},"# => [ 3, 2, 3, 4, 2, 3, 123, 3 ]\n",[406,1550,1551],{},"Обратите внимание, что вложенный цикл запускается, только если текущий элемент — список.\nЧисто технически во вложенных циклах нет ничего особенного.\nИх можно вкладывать внутрь любого блока и друг в друга сколько угодно раз.\nНо прямой связи между внешним и вложенным циклами нет.\nВнутренний цикл может использовать результаты внешнего, а может и работать по своей собственной логике независимо.\nВложенные циклы могут резко увеличить сложность кода, так как появляется множество постоянно изменяющихся переменных.\nСтановится тяжело уследить за происходящими внутри процессами.\nКроме того, вложенные циклы могут указывать на использование неэффективного алгоритма решения задачи.\nЭто не всегда так, но вероятность такая есть.\nКак избавиться от вложенных циклов? Есть три варианта.\nПервый – ничего не делать, иногда вложенные циклы это нормально, особенно в низкоуровневых алгоритмах.\nВторой – переписать алгоритм так, чтобы вложенного цикла не осталось вообще, даже в вызываемых функциях.\nКогда это невозможно – использовать третий вариант.\nВынести вложенный цикл в функцию, либо заменить на встроенную функцию (или метод).",[406,1553,1554],{},"Пример выноса в отдельную функцию кода на flatten:",[410,1556,1558],{"className":412,"code":1557,"language":414,"meta":415,"style":415},"# Изменяет первый список напрямую\n# В данном случае такая реализация оправдана\ndef append(data1, data2):\n    for item in data2:\n        data1.append(item)\n\ndef flatten(coll):\n    result = []\n    for item in coll:\n        if isinstance(item, list):\n            append(result, item)\n        else:\n            result.append(item)\n\n    return result\n\nprint(flatten([3, 2, [], [3, 4, 2], 3, [123, 3]]))\n",[417,1559,1560,1565,1570,1580,1591,1596,1600,1608,1616,1626,1638,1643,1649,1653,1657,1664,1669],{"__ignoreMap":415},[420,1561,1562],{"class":422,"line":423},[420,1563,1564],{"class":466},"# Изменяет первый список напрямую\n",[420,1566,1567],{"class":422,"line":450},[420,1568,1569],{"class":466},"# В данном случае такая реализация оправдана\n",[420,1571,1572,1574,1577],{"class":422,"line":457},[420,1573,493],{"class":430},[420,1575,1576],{"class":496}," append",[420,1578,1579],{"class":426},"(data1, data2):\n",[420,1581,1582,1584,1586,1588],{"class":422,"line":463},[420,1583,1426],{"class":430},[420,1585,518],{"class":426},[420,1587,521],{"class":430},[420,1589,1590],{"class":426}," data2:\n",[420,1592,1593],{"class":422,"line":563},[420,1594,1595],{"class":426},"        data1.append(item)\n",[420,1597,1598],{"class":422,"line":569},[420,1599,454],{"emptyLinePlaceholder":453},[420,1601,1602,1604,1606],{"class":422,"line":589},[420,1603,493],{"class":430},[420,1605,1411],{"class":496},[420,1607,500],{"class":426},[420,1609,1610,1612,1614],{"class":422,"line":594},[420,1611,529],{"class":426},[420,1613,431],{"class":430},[420,1615,672],{"class":426},[420,1617,1618,1620,1622,1624],{"class":422,"line":603},[420,1619,1426],{"class":430},[420,1621,518],{"class":426},[420,1623,521],{"class":430},[420,1625,524],{"class":426},[420,1627,1628,1630,1632,1634,1636],{"class":422,"line":608},[420,1629,1442],{"class":430},[420,1631,1445],{"class":540},[420,1633,1448],{"class":426},[420,1635,1451],{"class":540},[420,1637,1454],{"class":426},[420,1639,1640],{"class":422,"line":625},[420,1641,1642],{"class":426},"            append(result, item)\n",[420,1644,1645,1647],{"class":422,"line":630},[420,1646,1477],{"class":430},[420,1648,1480],{"class":426},[420,1650,1651],{"class":422,"line":639},[420,1652,1485],{"class":426},[420,1654,1655],{"class":422,"line":1185},[420,1656,454],{"emptyLinePlaceholder":453},[420,1658,1660,1662],{"class":422,"line":1659},15,[420,1661,1490],{"class":430},[420,1663,600],{"class":426},[420,1665,1667],{"class":422,"line":1666},16,[420,1668,454],{"emptyLinePlaceholder":453},[420,1670,1672,1674,1676,1678,1680,1682,1684,1686,1688,1690,1692,1694,1696,1698,1700,1702,1704,1706],{"class":422,"line":1671},17,[420,1673,633],{"class":540},[420,1675,1503],{"class":426},[420,1677,1506],{"class":540},[420,1679,441],{"class":426},[420,1681,1511],{"class":540},[420,1683,1514],{"class":426},[420,1685,1506],{"class":540},[420,1687,441],{"class":426},[420,1689,1521],{"class":540},[420,1691,441],{"class":426},[420,1693,1511],{"class":540},[420,1695,1528],{"class":426},[420,1697,1506],{"class":540},[420,1699,1533],{"class":426},[420,1701,1536],{"class":540},[420,1703,441],{"class":426},[420,1705,1506],{"class":540},[420,1707,1543],{"class":426},[406,1709,1710,1711,1715,1716,1719],{},"Попробуйте сами запустить код в окне ниже с интерпретатором Python и повторите примеры из статьи чтобы самим увидеть и понять как всё это работает.\nДля этого в ячейке с кодом нажмите клавиши на клавиатуре ",[1712,1713,1714],"strong",{},"Shift+Enter"," или запустите код через ",[1712,1717,1718],{},"кнопку Run"," по значку ▶.",[1721,1722],"jypiter",{},[1724,1725,1726],"style",{},"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 .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}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 .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}",{"title":415,"searchDepth":450,"depth":563,"links":1728},[1729],{"id":399,"depth":450,"text":218,"children":1730},[1731,1732,1733],{"id":403,"depth":457,"text":404},{"id":1190,"depth":457,"text":1191},{"id":1395,"depth":457,"text":1396},"2025-04-06","Генерация строки в цикле. Обработка строк через преобразование в список. Вложенные циклы","md","images\u002Fblog\u002Fpython\u002Fst16\u002Fimg.png",{},{"title":218,"description":1735},"avn2B4jC_dLjGrNbMweIjT5gzRTP5yA1w3ogtQ8sfNk",[1742,1744],{"title":214,"path":215,"stem":216,"description":1743,"children":-1},"Списки как множества. Управляющие конструкции. Вложенные списки",{"title":222,"path":223,"stem":224,"description":1745,"children":-1},"Срезы, де-структуризация списков. Операторы упаковки и распаковки",1780737508987]