Цикълът For в Python има някои различни функции от другите езици за програмиране. Оставям ви какво научавам, за да извлека максимума от един от най-използваните цикли.
В Python е предвидено да се итерира през итерируем обект, било то списък, обект или друг елемент.
Следната структура е
h2=[ 'Valencia', 'Castellón', 'Alicante'] for j in h2: instructions
Тук h2 е итерируем елемент, например списък h2=[ 'Valencia', 'Castellón', 'Alicante']. Цикълът ще има 3 итерации, в първата j=Valencia, във втората променливата j=Castellón.
И с това можем да дефинираме инструкциите, които искаме, като винаги помним отстъпа, нещо съществено в Python и което много хора пренебрегват, получавайки грешки в кода.
Повторете цикъла for точен брой пъти.
Ако искаме да се повтори определен брой пъти, както можем да направим в C++, ще трябва да използваме range(). За да повторим 10 пъти, ще използваме a
for element in Range(9): instructions
Поставяме 9, а не 10, защото диапазонът започва от 0, така че от 0 до 9 има 10 итерации или завъртания на цикъла.
Познаването на Range() ни позволява, вместо да поставим число вътре, да поставим променлива, с която ще имаме много повече контрол.
var = 10 for element in Range(var): instructions
Функцията Range има много опции, ще говоря за нея в друга публикация, за да не смесвам съдържанието и да го развия максимално.
Може да се направи много повече, за да се контролира потока на for цикъла.
Изявления за прекъсване и продължаване
Има 2 много полезни функции, които ни позволяват да направим for цикъл много функционален, fon break и continue. Те обикновено се използват с условни изрази, if, проверка дали нещо е вярно.
Те работят в други цикли и има друг интересен оператор, който е pass, който е израз, който се изпълнява, но не прави нищо и е идеален, когато искаме да дефинираме структура, която изисква команди, но искаме да ги поставим по-късно (коментарите са не е полезно за това)
Почивка
С break можем да излезем от цикъла по всяко време. Както си представяте много полезно. Вярно е, че има други структури като Докато,
numeros = [1, 2, 4, 3, 5, 8, 6] for n in numeros: if n == 3: break else: print('No se encontró el número 3')
Продължете
Това ни кара да преминем към следващия елемент в цикъла.
numeros = [1, 2, 4, 3, 5, 8, 6] for n in numeros: if n == 3: continue else: print('No se encontró el número 3')
https://j2logo.com/bucle-for-en-python/
За… друго
Има структура, получена от For, която е за … else
datos = [1, 2, 3, 4, 5] for n in datos: if n == 2: break else: print('No hay 2')
Тази структура възникна, след като те видяха, че е необходимо и че много хора използват алтернативни начини за постигане на това. Така те помагат на хората и получават по-четлив код
за _ в итерируем
Виждал съм това в някои програми, въпреки че никога не съм го използвал.
Когато итерираме обект, списък, речник и т.н., но съдържанието на тези елементи не ни интересува, можем да го посочим с _
Пример:
Искаме да преброим елементите на списък, но не ни интересува какво съдържа, искаме само неговата дължина.
h2=[ 'Valencia', 'Castellón', 'Alicante'] count = 0 for _ in h2: cont += 1
В много сайтове препоръчват да не се злоупотребява с тази практика. Наистина не знам какви са предимствата, по-бързо ли е?
Lo recomiendan en el curso de Introducción a Python de Harvard. Cuando iteramos sobre una variable pero no vamos a usrarla para nada ponemos el undescore, es como comentan allí un Pythonic, una práctica de Python que no se ve en otros idiomas, ayuda a la legibilidad por no tener que estar pendiente de para qué sirve.
примка назад
назад за цикъл. Да повтарям от края към началото
Той използва функцията reversed(), въведена в Python 3
h2=[ 'Valencia', 'Castellón', 'Alicante'] for j in reversed(h2): print (j)
Цикъл с два индекса, стойност на итерируемия и индекс
С enumerate() можем да работим с индексите на колекция. Защото много пъти, в допълнение към стойността на самия итерируем обект, ние се интересуваме от неговия индекс.
h2=[ 'Valencia', 'Castellón', 'Alicante'] for j, h in enumerate(h2): print j, '-->', h2[i]
Итериране на 2 списъка
Друга много интересна опция е zip(), която ще улесни работата ни и ще направи кода ни по-опростен и четим.
h2=[ 'Valencia', 'Castellón', 'Alicante'] cod=[100, 200, 300] for j, h in zip(h2, cod): print h2, '-->', cod
В Python 2.x izip() се използва за подобряване на тази функция, но в Python 3 izip е zip()
Цикъл в подреден ред
Итерирайте по ред по стойността на обекта вместо по неговия индекс. използва се sorted().
colors = ['rojo', 'amarillo', 'verde'] for color in sorted(colors): print color
И ако искаме да го направим обратно
colors = ['rojo', 'amarillo', 'verde'] for color in sorted(colors, reverse=True): print color
Персонализиран ред на сортиране
colors = ['rojo', 'amarillo', 'verde'] for color in sorted(colors, key=len): print color
Стойност на Sentinel в for цикъл
Стойността на контролера е стойност, която кара цикъла да приключи. Обикновено се представя в цикъл while, но Raymond Hettinger ни показва как да го използваме с for, което е по-бързо
blocks = [] for block in iter(partial(f.read, 32), ''): blocks.append(block) print (block)
Обхождане на речници с for
Речниците са основни инструменти за изразяване на връзки и групиране.
Можете да преминете през речника по традиционен начин с for, но това няма да върне цялата информация, няма да можем да работим с подобни стойности и индекси, ако не започнем да добавяме броячи и други елементи.
d = {'casa': 'azul', 'coche': 'rojo', 'hombre': 'verde'} for k in d.keys(): if k.startswith('r'): del d[k]
По този начин, в допълнение към виждането на елементите, можем да модифицираме речника, като променяме елементи или ги изтриваме, в същото време, когато цикълът for се повтаря.
d.keys() извиква аргументите и прави копие, което съхранява в списък, който можем да модифицираме.
Да получите индекси и стойности вместо нещо традиционно и това е първото нещо, което идва на ум за тези от нас, които започват да програмират
for k in d: print k, '-->', d[k]
Ние ще използваме този много по-бърз вариант
for k, v in d.items(): print k, '-->', v
iritems() от items()
Говорете за цикли в Python от Реймънд Хетингер
Това е старо, но много илюстративно видео, където в първите 20 минути Raymond Hettinger ни учи на различните възможности на циклите в Python и ни дава примери за това как те трансформират широко използвани от хората структури във функции, за да направят цикъла по-четлив и по-прост .код.