Ir para o conteúdo
ou

Software livre Brasil

Magnun

Nenhum artigo selecionado ainda.
 Voltar a Blog
Tela cheia

[Curso de Python] A função range

26 de Fevereiro de 2010, 0:00 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 269 vezes

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

Fonte: http://under-linux.org/blogs/magnun/curso-de-python-funcao-range-1862/

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.