Introdução
Como outras linguagens de programação, os loops for no Python são um pouco diferentes, no sentido de que funcionam mais como um iterador e menos como uma palavra-chave for. Em Python, não existe uma sintaxe como C for(i=0; i<n; i++), mas você usa for in n.
Eles podem ser usados para iterar sobre uma sequência de um list, string, tuple, set, array, data frame.
Dada uma lista de elementos, um loop for pode ser usado para iterar sobre cada item dessa lista e executá-lo.
Para iterar sobre uma série de itens, os loops “for” usam a função range. A função range retorna uma nova lista com números desse intervalo especificado com base no comprimento da sequência.
Ao iterar sobre uma sequência, você também pode usar o índice dos elementos na sequência para iterar, mas o segredo é primeiro calcular o comprimento da lista e, em seguida, iterar sobre a série dentro do intervalo desse comprimento.
Os loops for em Python são indexados a partir de zero.
Vamos direto para a parte da implementação.
Você também pode assistir a este vídeo para um tutorial rápido!
Implementando loops
Pra começar, vamos imprimir números de 1 a 10. Como os loops for em Python são indexados a partir de zero, você vai precisar adicionar um em cada iteração; caso contrário, ele vai mostrar valores de 0 a 9.
for i in range(10):
print (i+1)
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
Vamos iterar sobre uma string de uma palavra Datacamp usando o loop for e imprimir apenas as letras a.
for i in "Datacamp":
if i == 'a':
print (i)
# a
# a
# a
Digamos que você queira definir uma lista de elementos e iterar sobre esses elementos um por um.
sequence = [1, 2, 8, 100, 200, 'datacamp', 'tutorial']
for i in sequence:
print (i)
# 1
# 2
# 8
# 100
# 200
# datacamp
# tutorial
Mas e se você quiser descobrir o tamanho da lista e depois percorrê-la? Você vai usar a função embutida len para isso e, em seguida, na saída de comprimento, vai aplicar range.
Lembre-se de que o método range sempre espera um valor inteiro.
sequence = [1, 2, 8, 100, 200, 'datacamp', 'tutorial']
for i in range(len(sequence)):
print (sequence[i])
# 1
# 2
# 8
# 100
# 200
# datacamp
# tutorial
Ótimo! Mas por que você precisa usar a função len quando pode usar diretamente for i in numbers? A resposta é simples. E se você quiser modificar ou trabalhar com os índices da sequência, como alterar o elemento de uma lista já existente, vai precisar de um range(len(sequence)).
sequence = [1, 2, 8, 100, 200, 'datacamp', 'tutorial']
for i in range(len(sequence)):
element = sequence[i]
if type(element) == int:
sequence[i] = element + 4
print(sequence)
# [5, 6, 12, 104, 204, 'datacamp', 'tutorial']
Legal, né? Você conseguiu modificar os elementos da lista com base na condição if.
Agora vamos ver como você pode imprimir números ímpares entre 1 e 20. Para fazer isso, você vai ter que definir três coisas na função range. O ponto inicial, o ponto final e o valor do incremento (ou passos) em que o loop vai aumentar os números de 1 a 20.
for i in range(1,20,2):
print (i)
# 1
# 3
# 5
# 7
# 9
# 11
# 13
# 15
# 17
# 19
Loop for aninhado
for i in range(11):
for j in range(i):
print (i, end=' ')
print()
# 1
# 2 2
# 3 3 3
# 4 4 4 4
# 5 5 5 5 5
# 6 6 6 6 6 6
# 7 7 7 7 7 7 7
# 8 8 8 8 8 8 8 8
# 9 9 9 9 9 9 9 9 9
# 10 10 10 10 10 10 10 10 10 10
Loop for para iterar sobre linhas e colunas de um DataFrame
import pandas as pd
iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
iris.head()
| sepal_length | largura da sépala | petal_length | petal_width | espécie | |
|---|---|---|---|---|---|
| 0 | 5.1 | 3,5 | 1.4 | 0,2 | setosa |
| 1 | 4,9 | 3,0 | 1.4 | 0,2 | setosa |
| 2 | 4,7 | 3.2 | 1.3 | 0,2 | setosa |
| 3 | 4,6 | 3.1 | 1,5 | 0,2 | setosa |
| 4 | 5,0 | 3,6 | 1.4 | 0,2 | setosa |
len(iris)
# 150
for i in range(len(iris)):
Class = iris.iloc[i,4]
if Class == 'versicolor' and i < 70:
print (Class)
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
# versicolor
Depois, vamos adicionar dois a cada linha das colunas sepal_length,sepal_width, petal_length e petal_width.
columns = ['sepal_length','sepal_width','petal_length','petal_width']
for indices, row in iris.iterrows():
for column in columns:
iris.at[indices,column] = row[column] + 2
iris.head()
| sepal_length | largura da sépala | petal_length | petal_width | espécie | |
|---|---|---|---|---|---|
| 0 | 7.1 | 5,5 | 3,4 | 2.2 | setosa |
| 1 | 6,9 | 5,0 | 3,4 | 2.2 | setosa |
| 2 | 6,7 | 5.2 | 3.3 | 2.2 | setosa |
| 3 | 6,6 | 5.1 | 3,5 | 2.2 | setosa |
| 4 | 7,0 | 5,6 | 3,4 | 2.2 | setosa |
Iterando sobre uma sequência com a função Lambda
A função lambda do Python é rápida e poderosa em comparação com o loop básico for. É muito usado, principalmente quando se trata de DataFrame. Você pode processar seus dados com a ajuda da função Lambda usando bem pouca programação. Mas, às vezes, fica difícil entender isso.
x = [20, 30, 40, 50, 60]
y = []
for v in x :
y += [v * 5]
print(y)
# [100, 150, 200, 250, 300]
Agora, vamos tentar isso com uma função lambda e map.
Map pega uma função, tipo, uma função lambda e uma sequência x e depois devolve uma nova sequência.
x = [20, 30, 40, 50, 60]
y = map(lambda x: x * 5,x)
print(y)
# <map object at 0x4063cc8>
Ele retorna uma função geradora e, para obter a saída do gerador, você passa a saída como um argumento para list.
x = [20, 30, 40, 50, 60]
y = map(lambda x: x * 5,x)
print(list(y))
# [100, 150, 200, 250, 300]
Agora, vamos dar um passo atrás e analisar tanto o loop for quanto a combinação lambda/map(). Você vai perceber que a diferença entre os dois é adicionar map, lambda e tirar “for” e “in”. E ainda por cima, você conseguiu codificar isso em uma única linha.
Conclusão
Parabéns por terminar este tutorial básico sobre o loop for em Python.
Os loops For são a espinha dorsal de todas as linguagens de programação e, quando se trata do Python, usar loops For não é nada difícil de codificar, e eles são parecidos com escrever uma frase em inglês.
Se você quiser saber mais sobre loops for em Python, faça o curso Python Data Science Toolbox (Parte 2) da DataCamp.
Fique à vontade para fazer qualquer pergunta relacionada a este tutorial na seção de comentários abaixo.
