Jump to content
Sign in to follow this  
tejano96

Slicing by PyTeam

Recommended Posts

tejano96

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.

Share this post


Link to post
Share on other sites
JoaoRodrigues

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 ;)

Share this post


Link to post
Share on other sites
djthyrax

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() ;)

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
JoaoRodrigues

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

Share this post


Link to post
Share on other sites
rolando2424

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 ;))


Não me responsabilizo por qualquer dano ocorrido no seguimento dos meus conselhos. Prontos, a minha pessoa está oficialmente protegida legalmente :D

Share this post


Link to post
Share on other sites
djthyrax
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. ;)


Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Share this post


Link to post
Share on other sites
mauro

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


A essência do conhecimento consiste em aplicá-lo, uma vez possuídoConfúcio

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.