• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

tejano96

[Python] Slicing by PyTeam

9 mensagens neste tópico

Slicing

Este tutorial tem como objectivo explicar e dar alguns exemplos da forma como podemos usar a funcionalidade slicing. Traduzindo slice para Português teremos a palavra "fatia" e o que faz não é nada mais anda menos do que retirar uma fatia.

Tal como se pode indexar para acedermos a elementos individuais podemos usar o comando slice para aceder a um gama de elementos.

O slice é bastante útil para podermos retirar partes de uma sequência, seja ela numérica ou alfanumérica. A numeração é extremamente importante para este tipo de operações e acho que será altura de dar alguns exemplos de como podemos usá-la.

>>> n = (1, 2, 3, 4, 5, 6, 7)

n = [index 1: index 2: passos] desta forma podemos definir a amplitude a retirar/visulaizar e o nº de passos ou saltos.

Em baixo estamos a retirar da lista o index com a posição 0. O primeiro número na lista tem o index 0 e assim sucessivamente.

>>> n[0]
1

O slicing está representado em baixo e tal como descrito na frase anterior o index 1 representa o 2º número na lista e o index 2

representa o digito presente na posição 4, isto por que o 2º index deve ser interpretado como "valor-1".

>>> n[1:5]
(2, 3, 4, 5)

Exemplo de como se usam os indicies e respectiva numeração:

P   y   T   e   a   m

0   1   2   3   4   5

Se tivermos n = ‘PyTeam’, então:

>>> n[0]
'P'
>>> n[4]
'a'

Se estivermos a falar em slicing então teremos o seguinte:

>>> n[0:2]
'Py'
>>> n [2:4]
'Te'

Tambem poderemos usar valores negativos:

   P  y  T  e  a  m

  -6 -5 -4 -3 -2 -1

>>> n[-6:-3]
'PyT'

Não esquecer que se não colocarmos valores nas 2 primeiras posições, teremos todo o conteudo de um conjunto, neste caso teriamos:

>>> n[:]
'PyTeam'

Se adicionarmos a isto o facto de a contagem ser negativa, ou seja, o valor de step ser -1 então teremos:

>>> n[::-1]
'maeTyP'


Tutorial na wiki.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mete isso com o Geshi para se perceber melhor ;)

Mas de resto, bom tutorial. Isto dá um jeito descomunal. Só para verificar capicuas por exemplo, basta usar um teste de lógica com esta última operação string[::-1]. Muito útil e essencial sem dúvida ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só para verificar capicuas por exemplo, basta usar um teste de lógica com esta última operação string[::-1]. Muito útil e essencial sem dúvida ;)

True, mas em php bastava um strrev() ;)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tendo em conta que eu venho disto....

program capicua(input, output)
var num,, num_ori, num_inv: integer
begin
writeln('Introduza um numero: ');
readln(num);
num_ori := num;
num_inv := 0
while num>0 do
begin
num_inv := num_inv*10+(num%10)
num := num/10
end;
if num_inv = num_ori:
then writeln('E Capicua');
else writeln('Nao E capicua')
end.

Acho mais simples o [::-1]. Mas já que estás com coisas, tens também em Python a função string reverse http://www.python.org/doc/2.4.4/whatsnew/node7.html

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Um detalhe "técnico"

P  y  T  e  a  m

0  1  2  3  4  5

Seria mais assim

P  y  T  e  a  m

0  1  2  3  4  5

(porque o que conta é os espaços)

Mas prontos, o resultado final é o mesmo ;))

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Citação
The best way to remember how slices work is to think of the indices as pointing between characters, with the left edge of the first character numbered 0. Then the right edge of the last character of a string of n characters has index n, for example:

			    +---+---+---+---+---+
			    | H | e | l | p | A |
			    +---+---+---+---+---+
			    0  1  2  3  4  5
			    -5  -4  -3  -2  -1

So I guess, rolando2424 was right. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Criei uma classe bem simples para mostrar um aplicação com alguns conceitos abordados no tutorial.

Correções e sugestões são bem vindas..

Mauro

---------- Código ----------

class listUtils:
def __init__(self, objList):
	self.listObj = objList
def first(self):
	'''first item'''
	return self.listObj[0]
def last(self):
	'''last item'''
	return self.listObj[len(self.listObj)-1]
def reverse(self):
	'''reverse object'''
	return self.listObj[::-1]
def first_to(self, tamanho):
	'''lista[primeiro:x]'''
	return self.listObj[0:tamanho]
def to_last(self, tamanho):
	'''lista[x:ultimo]'''
	return self.listObj[tamanho:len(self.listObj)-1]
def size(self):
	'''tamanho'''
	return len(self.listObj)

Pode ser que alguns não estejam familiarizados com orientação a objeto. Segue um exemplo de como usar a classe... Pode ser direto no prompt interativo

palavra = "Língua Portuguesa"

listFuncs = listUtils(palavra)

llistFuncs.size()

17

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora