Ver Feed RSS

root@blog:/# chmod o+r *

[Curso de Python] A função range

Avalie este Post de Blog

Antes de prosseguir leia os artigos anteriores aqui.



Olá pessoal!

Dando continuidade ao estudo da estrutura for vamos ver uma função muito utilizada em cojuto com o for: a função range

Como brinde, devido a uma dúvida postada nos comentários, vamos ver como fazer combinações em Python.

A função range



Muitas vezes, junto com o for, é necessário criar uma lista de valores, para isso utilizamos a função range. A função range, gera um lista de valores de acordo com os argumentos passados para ela. Segue um exemplo básico:

Código :
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Ao especificar somente um valor, a função range retorna uma lista de número. Diferente do que imaginamos, ela não retorna uma lista até o número especificado (nesse caso, de 0 a 10) mas sim um intervalo que se inicia no zero e termina no número inteiro que antecede o número especificado. na notação matemática para intervalos, a função range do exemplo anterior criaria o seguinte intervalo: [0,10). Isto é, um intervalo fechado à esquerda e aberto à direita.

É possível alterar o início do intervalo, basta adicionar mais uma argumento. Mesmo alterando o início, o intervalo gerado pelo range sempre será fechado à direita e aberto à esquerda. Um pequeno exemplo:
Código :
>>> range(1,10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(5,10)
[5, 6, 7, 8, 9]
>>> range(-5,10)
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
Também é possível especificar o "passo" do intervalo, ou seja o valor de incremento:
Código :
>>> range(-6,6,2)
[-6, -4, -2, 0, 2, 4]
>>>
No exemplo acima, utilizamos um incremento de 2, desta forma "pulamos" de 2 em 2.

O nosso colega Jockerman pediu uma ajuda para re-escrever o seguinte código C em Python:
Código :
#include <stdio.h>
#include <stdlib.h>
 
main(){
 
    int x,y;
 
    for(x=1; x<=10;x++){
        for(y=x+1;y<=10;++y){
            printf(\"%d, %d\n\", x,y);
        }
    }
}
Esse trecho de código é utilizado para gerar pares de numeros não repetidos. Um trecho da execusão desse código em C:
Código :
1, 2
1, 3
1, 4
1, 5
1, 6
1, 7
1, 8
1, 9
1, 10
2, 3
2, 4
2, 5
2, 6
2, 7
Vamos reescrever esse código para Python...
Código :
for x in range(1,11):
    for y in range(x+1,11):
        print '%i, %i'%(x,y)
Podemos ver que a unica diferença entre os códigos é a ausência de declaração de variáveis, a necessidade da função range (que faz o papel de x=1; x<=10;x++) e que no range temos que especificar o final como 11. Segue um trecho da saída gerada pela execução desse código:
Código :
1, 2
1, 3
1, 4
1, 5
1, 6
1, 7
1, 8
1, 9
1, 10
2, 3
2, 4
2, 5
2, 6
2, 7
Mas o mais legal de tudo é a facilidade que o Python provê aos seus programadores. Esse problema citado pelo nosso colega, é uma combinação simples de 2 em 2. Então, porque perder tempo pensando em como fazer esses fors? Gaste sua massa cinzenta em outros problemas, use a biblioteca padrão do Python:

Código :
from itertools import combinations
 
for x,y in combinations(range(1,11), 2):
    print '%i, %i'%(x,y)
Segue a saída completa gerada pela execução desse código:
Código :
1, 2
1, 3
1, 4
1, 5
1, 6
1, 7
1, 8
1, 9
1, 10
2, 3
2, 4
2, 5
2, 6
2, 7
2, 8
2, 9
2, 10
3, 4
3, 5
3, 6
3, 7
3, 8
3, 9
3, 10
4, 5
4, 6
4, 7
4, 8
4, 9
4, 10
5, 6
5, 7
5, 8
5, 9
5, 10
6, 7
6, 8
6, 9
6, 10
7, 8
7, 9
7, 10
8, 9
8, 10
9, 10

Atualizado 01-09-2010 em 09:18 por Magnun

Categorias
Python , Artigos , Artigos , Cursos , Curso de Python

Comentários

  1. Avatar de Erick
    Ótima explicação, bem clara e objetiva.
    Só uma dica, quando usar bibliotecas ou imports em exemplos e explicações seria legal sempre explicar o que aquele import ou biblioteca está fazendo ali a operação que ela realiza, não somente "Ei, vamos ser práticos use a biblioteca X", para quem não programa na linguagem ou está começando acaba ficando perdido. De resto ta ótimo parabéns.
  2. Avatar de Magnun
    Olá Erick!

    Ótima sugestão. Na verdade essa é a abordagem que uso. Esse caso foi uma excessão, uma explicação mais voltada para a pessoa que me propôs a questão e já é "um mais avançada" no Python. Na verdade, no meu curso, ainda nem expliquei o import statement, por isso não aprofundei. Isso será mostrado com detalhes mais futuramente, onde pretendo pegar os principais módulos da biblioteca padrão do Python e destrincha-los com bastante detalhes.

    Atém mais!
  3. Avatar de Caio Gomes
    Olá, só venho aqui agradecer o seu trabalho com o curso de python... comecei a aprender no começo do ano passado mas parei por um bom tempo, só que o curso já estava no meu favoritos a um tempo para conferir depois, até que enquanto escrevia um código me deparo com alguns problemas e resolvi estudar. Ah, e este foi o mais completo que achei, valeu!

+ Enviar Comentário