2216
Comentário:
|
2320
Refactoring Wiki - eliminando pragma
|
Deleções são marcadas assim. | Adições são marcadas assim. |
Linha 1: | Linha 1: |
#pragma section-numbers off | ## page was renamed from ParticionarSeqüência |
Linha 4: | Linha 4: |
Apresento nesta receita duas formas diferentes, em Pyhton, de particionar uma seqüência (lista, tupla, string) em uma lista, os elementos dessa lista são os valores originais da seqüência divididos em um tamanho máximo dado. Por exemplo, {{{'abcdefg'}}} retornaria {{{['abc', 'def', 'g']}}} para o tamanho máximo 3. | Apresento nesta receita duas formas diferentes, em Python, de particionar uma seqüência (lista, tupla, string) em uma lista, os elementos dessa lista são os valores originais da seqüência divididos em um tamanho máximo dado. Por exemplo, {{{'abcdefg'}}} retornaria {{{['abc', 'def', 'g']}}} para o tamanho máximo 3. |
Linha 6: | Linha 6: |
Esta receita teve uma motivação simples: um usuário do #python-br (irc.freenode.net) desejava imprimir em uma impressora fiscal, cujo o tamanho máximo de impressão é de, digamos, 30 caracteres. Então, para uma string de tamanho arbitrário, deve-se quebrar a string em pedaços com no máximo 30 caracteres, para sair corretamente na impressora fiscal. O resultado está em parte aqui, pois deseja-se no final, uma única string com quebra de linhas entre elas. | Esta receita teve uma motivação simples: um usuário do #python-br (irc.freenode.net) desejava imprimir em uma impressora fiscal, cujo o tamanho máximo de impressão é de, digamos, 30 caracteres. Então, para uma string de tamanho arbitrário, deve-se quebrar a string em pedaços com no máximo 30 caracteres para sair corretamente na impressora fiscal. O resultado está em parte aqui, pois deseja-se no final uma única string com quebra de linhas entre elas. |
Linha 51: | Linha 51: |
Este exemplo, além de mostrar como usar a função part(), também exibe como inserir as quebras de linhas necessárias para a impressão em papel. | Este exemplo, além de mostrar como usar a função {{{part()}}}, também exibe como inserir as quebras de linhas necessárias para a impressão em papel. |
Linha 62: | Linha 62: |
Em meus testes, a versão part2() chega a ser duas vezes mais rápida que a part(). | Em meus testes, a versão {{{part2()}}} chega a ser duas vezes mais rápida que a {{{part()}}}. |
Receita: Particionar uma Seqüência
Apresento nesta receita duas formas diferentes, em Python, de particionar uma seqüência (lista, tupla, string) em uma lista, os elementos dessa lista são os valores originais da seqüência divididos em um tamanho máximo dado. Por exemplo, 'abcdefg' retornaria ['abc', 'def', 'g'] para o tamanho máximo 3.
Esta receita teve uma motivação simples: um usuário do #python-br (irc.freenode.net) desejava imprimir em uma impressora fiscal, cujo o tamanho máximo de impressão é de, digamos, 30 caracteres. Então, para uma string de tamanho arbitrário, deve-se quebrar a string em pedaços com no máximo 30 caracteres para sair corretamente na impressora fiscal. O resultado está em parte aqui, pois deseja-se no final uma única string com quebra de linhas entre elas.
Código
1 # part.py
2 def part(seq, max):
3 """Particiona uma sequencia 'seq' em uma lista de 'max' elementos de seq.
4
5 Exemplo:
6 >>> print part.part('abcdefgh', 3)
7 ['abc', 'def', 'gh']
8 """
9 i, l = 0, []
10 while seq[i:i+max]:
11 l.append(seq[i:i+max])
12 i += max
13 return l
14
15 # Versao mais rapida
16 def part2(seq, max):
17 return [seq[x:x+max] for x in range(0, len(seq), max)]
18
19 def test():
20 assert part('abcdefgh', 3) == ['abc', 'def', 'gh']
21 assert part2('abcdefgh', 3) == ['abc', 'def', 'gh']
22
23 def benchmark():
24 import time
25 s = 'abcdefgh' * 500000
26 x = time.time()
27 part(s, 5)
28 print time.time() - x
29 x = time.time()
30 part2(s, 5)
31 print time.time() - x
32
33 if __name__ == '__main__':
34 test()
35 benchmark()
Exemplo de uso
Este exemplo, além de mostrar como usar a função part(), também exibe como inserir as quebras de linhas necessárias para a impressão em papel.
Em meus testes, a versão part2() chega a ser duas vezes mais rápida que a part().
Volta para CookBook.