Assine nossos feeds Siga nosso Twitter Adicione no Facebook Adicione no Linkedin
Visite também: BR-Linux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org ·  [mais]

Ver Feed RSS

root@blog:/# chmod o+r *

[Curso de Python] A função range

Avalie este Post de Blog
por em 26-02-2010 às 10:32 (5282 Visualizações)

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

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!

Trackbacks

Total de Trackbacks 0
URL do Trackback: