Este blog foi desenvolvido no intuito de auxiliar àqueles que estão iniciando no mundo do Python 3.x
Mostrando postagens com marcador string. Mostrar todas as postagens
Mostrando postagens com marcador string. Mostrar todas as postagens
segunda-feira, 3 de outubro de 2016
Dividir para conquistar: split(' ')
Muito bem. Um comandinho muito bacana presente em várias linguagens, não poderia faltar no nosso querido e amado Python, não é?
Ele é o split (do inglês: dividir).
Por exemplo:
Tenho a seguinte string:
biografia = 'Chuck Norris,10031940,Ryan,Oklahoma,EUA'
Poxa vida! Tenho muita informação numa variável só! E se eu quiser manipular esses dados de uma forma mais legal?
Simples: split nele!!!
Note que o que separa as informações é uma vírgula (pode ser ponto e vírgula, hífen, espaço, ponto, qualquer caractere).
Então eu uso o split e digo a ele: Mermão! Separa essa string onde houver vírgulas!
Isso em Pythonês é assim:
>>> biografia = biografia.split(',')
>>> biografia
['Chuck Norris', '10031940', 'Ryan', 'Oklahoma', 'EUA']
Legal né?
Agora fica mais fácil de manipular:
>>> nome = biografia[0]
>>> nome
'Chuck Norris'
>>> nascimento = biografia[1]
>>> nascimento
'10031940'
>>> cidade = biografia[2]
>>> cidade
'Ryan'
>>> estado = biografia[3]
>>> estado
'Oklahoma'
>>> pais = biografia[4]
>>> pais
'EUA'
Nem doeu, né?
Dúvidas? Reclamações? Sugestões? Zoações?
Deixe os comentários aqui!!!
E lembrem-se:
É....
esqueci...
Marcadores:
conquistar,
dividir,
manipulação,
Python,
Python3.x,
split,
string
quinta-feira, 30 de abril de 2015
MANIPULANDO LISTAS
Pois é, pessoal. Trabalhar com listas é fundamental para quem trabalha com manipulação de dados.
Então, hoje vamos a algumas "falcatruas" possíveis com listas:
Aqui temos a lista1 com os vilões e a lista2 com os heróis.
A lista3 é uma "lista de listas" contendo as listas 1 e 2. Muito legal, né?
>>> lista1 = ["Piccolo","Vegeta","Freeza","Cell","Majimboo"]
>>> lista1
['Piccolo', 'Vegeta', 'Freeza', 'Cell', 'Majimboo']
>>> lista2=["Kuririn","Yamcha","Tenshinhan","Gohan","Goku"]
>>> lista2
['Kuririn', 'Yamcha', 'Tenshinhan', 'Gohan', 'Goku']
>>> lista3=[lista1,lista2]
>>> lista3
[['Piccolo', 'Vegeta', 'Freeza', 'Cell', 'Majimboo'], ['Kuririn', 'Yamcha', 'Tenshinhan', 'Gohan', 'Goku']]
Aqui temos a lista1 com os vilões e a lista2 com os heróis.
A lista3 é uma "lista de listas" contendo as listas 1 e 2. Muito legal, né?
Você quer ordenar as lista? Sim? Então vamos ordená-las por ordem alfabética:
>>> lista1.sort()
>>> lista2.sort()
>>> lista1
['Cell', 'Freeza', 'Majimboo', 'Piccolo', 'Vegeta']
>>> lista2
['Gohan', 'Goku', 'Kuririn', 'Tenshinhan', 'Yamcha']
>>> lista3
[['Cell', 'Freeza', 'Majimboo', 'Piccolo', 'Vegeta'], ['Gohan', 'Goku', 'Kuririn', 'Tenshinhan', 'Yamcha']]
Vamos agora imprimir cada elemento das listas:
>>> for i in lista1: print(i)
Cell
Freeza
Majimboo
Piccolo
Vegeta
>>> for i in lista2: print(i)
Gohan
Goku
Kuririn
Tenshinhan
Yamcha
>>> for i in lista3: print(i)
['Cell', 'Freeza', 'Majimboo', 'Piccolo', 'Vegeta']
['Gohan', 'Goku', 'Kuririn', 'Tenshinhan', 'Yamcha']
Vamos agora imprimir apenas o elemento [1] de cada lista:
>>> print(lista1[1])
Freeza
>>> print(lista2[1])
Goku
>>> print(lista3[1])
['Gohan', 'Goku', 'Kuririn', 'Tenshinhan', 'Yamcha']
Agora vamos incluir elementos:
>>> lista1.append("Tao Pai Pai")
>>> lista1
['Cell', 'Freeza', 'Majimboo', 'Piccolo', 'Vegeta', 'Tao Pai Pai']
>>> lista2.append("Mestre Kame")
>>> lista2
['Gohan', 'Goku', 'Kuririn', 'Tenshinhan', 'Yamcha', 'Mestre Kame']
>>> lista3.append(["Bulma","Chichi","Vovó Uranai","Lunch","Videl","Maron"])
>>> lista3
[['Cell', 'Freeza', 'Majimboo', 'Piccolo', 'Vegeta', 'Tao Pai Pai'], ['Gohan', 'Goku', 'Kuririn', 'Tenshinhan', 'Yamcha', 'Mestre Kame'], ['Bulma', 'Chichi', 'Vovó Uranai', 'Lunch', 'Videl', 'Maron']]
Note que foi inserida uma nova lista de mulheres em lista3, que é uma "lista de listas".
Agora vamos apagar um elemeto da lista:
>>> lista1.pop(3)
'Piccolo'
>>> lista1
['Cell', 'Freeza', 'Majimboo', 'Vegeta', 'Tao Pai Pai']
>>> lista2.pop(lista2.index("Yamcha"))
'Yamcha'
>>> lista2
['Gohan', 'Goku', 'Kuririn', 'Tenshinhan', 'Mestre Kame']
>>> lista3.pop(2[3])
>>> lista3[2].pop(lista3[2].index("Videl"))
'Videl'
- Nossa senhora! Fiquei tonto agora com essas falcatruas!!!
Calma, amigão! Vou explicar
>>> lista1.pop(3)
Excluí o elemento de índice 3 da lista1.
Note que o Python devolve o valor do elemento excluído. Caso não queira este retorno, utilize o remove em lugar do pop.
>>> lista2.pop(lista2.index("Yamcha"))
'Yamcha'
O comando lista2.index("Yamcha") me retorna o índice dentro da lista que contém o valor "Yamcha". Daí o retorno deste comando me dá o valor do indice que será excluído como lista3.pop.
**IMPORTANTE** Caso houverem dentro da lista dois elementos com o mesmo valor, apenas o primeiro será retornado com o index!
Agora vou criar uma lista doidona pra você perceber o poder da lista em Python.
>>> doidona=[1,23,"Android","Bom dia",("a","b","c"),["YuYu Hakusho","CDZ","DBZ","Giban"],lista2]
>>> doidona
[1, 23, 'Android', 'Bom dia', ('a', 'b', 'c'), ['YuYu Hakusho', 'CDZ', 'DBZ', 'Giban'], ['Gohan', 'Goku', 'Kuririn', 'Tenshinhan', 'Mestre Kame']]
>>> for i in doidona: print(type(i))
<class 'int'>
<class 'int'>
<class 'str'>
<class 'str'>
<class 'tuple'>
<class 'list'>
<class 'list'>
Ficou feliz né? Cada elemento da lista é de um tipo!!! Espetacular. E dá pra 'enfiar' qualquer tipo de dados numa lista, incluindo uma própria lista! Não é demais?
Pois bem pessoal, Espero ter ajudado mais uma vez.
Não deixem de comentar. E se tiverem algum pedido, deixem aqui nos comentários também!
Até a próxima!
segunda-feira, 20 de abril de 2015
EXPLORANDO UM POUCO MAIS A MANIPULAÇÃO DE STRINGS
Oi pessoas.
Me desculpem pelo hiato, mas é que as provas chegaram aí, já viram, né?
Pois bem, enquanto eu não consigo chegar no Salão do Tempo pra estudar um ano inteiro em um dia, vou fazendo o possível pra manter o blog atualizado.
Então... que tal brincar mais um pouquinho com strings???
Já aprendemos a inverter a string utilizando o [::-1] e também aprendemos a inverter a string de hexa com a biblioteca binascii.
Agora ensinarei aqui a inverter a string hexa sem transformar os dados, ou seja, trabalharemos diretamente com strings o tempo todo.
Supondo que a string seja:
'4b494b4f48c394'
Que traduzindo de HEX para ASCII significa "KIKOHÔ".
Vamos inverter para que o resultado seja:
'94c3484f4b494b' ou seja "ÔHOKIK".
>>> a='4b494b4f48c394'
>>> b=''
>>> for i in range(len(a),0,-2): b=b+a[i-2:i]
>>> b
'94c3484f4b494b'
Muito bom, né?
O que isso quer dizer?
Muito bem. O for todo mundo conhece né? Não?
Então aqui vai:
for i in range(100): .......
Isso quer dizer que 'i' irá receber os números de 0 a 99, pois irá fazer 100 iterações.
for i in range (1,100,1): ........
Isso quer dizer que 'i' irá receber valores de 1 a 100 com passos de 1 em 1.
for i in range (1,100,2): ........
Isso quer dizer que 'i' irá receber os valores de 1 a 100 com passos de 2 em dois, ou seja: 1,3,5,7,...,97,99.
Então voltando ao exemplo:
for i in range(len(a),0,-2): b=b+a[i-2:i]
len(a) é o tamanho da string. No nosso caso 4b494b4f48c394 tem 14 caracteres, então len(a) = 14, daí o range NESSE CASO é: range(14,0,-2), então i recebe valores de 14 a 0 com passos de -2 (2 decrescente).
Aí vemos as instruções: b=b+a[i-2:i].
Na primeira iteração b está vazio (''), mas receberá a concatenação da string b ('') e do fragmento de string a[i-2:i], como o valor de 'i' na primeira iteração é 14, então será a[14-2:14] ou a[12:14]='94'. Ao fim dessa iteração b='94'
Na primeira iteração b contém ('94'), mas receberá a concatenação da string b ('94') e do fragmento de string a[i-2:i], como o valor de 'i' na segunda iteração é 12, então será a[12-2:12] ou a[10:12]='c3'. Ao fim dessa iteração b='94c3'.
Me desculpem pelo hiato, mas é que as provas chegaram aí, já viram, né?
Pois bem, enquanto eu não consigo chegar no Salão do Tempo pra estudar um ano inteiro em um dia, vou fazendo o possível pra manter o blog atualizado.
Então... que tal brincar mais um pouquinho com strings???
Já aprendemos a inverter a string utilizando o [::-1] e também aprendemos a inverter a string de hexa com a biblioteca binascii.
Agora ensinarei aqui a inverter a string hexa sem transformar os dados, ou seja, trabalharemos diretamente com strings o tempo todo.
Supondo que a string seja:
'4b494b4f48c394'
Que traduzindo de HEX para ASCII significa "KIKOHÔ".
Vamos inverter para que o resultado seja:
'94c3484f4b494b' ou seja "ÔHOKIK".
>>> a='4b494b4f48c394'
>>> b=''
>>> for i in range(len(a),0,-2): b=b+a[i-2:i]
>>> b
'94c3484f4b494b'
Muito bom, né?
O que isso quer dizer?
Muito bem. O for todo mundo conhece né? Não?
Então aqui vai:
for i in range(100): .......
Isso quer dizer que 'i' irá receber os números de 0 a 99, pois irá fazer 100 iterações.
for i in range (1,100,1): ........
Isso quer dizer que 'i' irá receber valores de 1 a 100 com passos de 1 em 1.
for i in range (1,100,2): ........
Isso quer dizer que 'i' irá receber os valores de 1 a 100 com passos de 2 em dois, ou seja: 1,3,5,7,...,97,99.
Então voltando ao exemplo:
for i in range(len(a),0,-2): b=b+a[i-2:i]
len(a) é o tamanho da string. No nosso caso 4b494b4f48c394 tem 14 caracteres, então len(a) = 14, daí o range NESSE CASO é: range(14,0,-2), então i recebe valores de 14 a 0 com passos de -2 (2 decrescente).
Aí vemos as instruções: b=b+a[i-2:i].
Na primeira iteração b está vazio (''), mas receberá a concatenação da string b ('') e do fragmento de string a[i-2:i], como o valor de 'i' na primeira iteração é 14, então será a[14-2:14] ou a[12:14]='94'. Ao fim dessa iteração b='94'
Na primeira iteração b contém ('94'), mas receberá a concatenação da string b ('94') e do fragmento de string a[i-2:i], como o valor de 'i' na segunda iteração é 12, então será a[12-2:12] ou a[10:12]='c3'. Ao fim dessa iteração b='94c3'.
E aí vai até que o range chegue a 0, percorrendo toda a string em a.
Por hoje é só, pessoal!
Marcadores:
conversão,
for,
Hexadecimal,
índice,
inversão,
iteração,
ordenação,
programação,
Python3.x,
string
domingo, 12 de abril de 2015
BRINCANDO COM STRINGS - ÍNDICES E INVERSÕES
Vamos agora fazer umas 'falcatruas' com strings.
Escolhi strings por serem o resultado de muitas conversões
Vamos ao princípio básico: o índice.
>>> a='KAKAROTO'
>>> a[0]
'K'
>>> a[1]
'A'
>>> a[2]
'K'
>>> a[3]
'A'
>>> a[4]
'R'
>>> a[5]
'O'
>>> a[6]
'T'
>>> a[7]
'O'
>>> a[8]
Traceback (most recent call last):
File "<pyshell#103>", line 1, in <module>
a[8]
IndexError: string index out of range
Percebemos aqui então que o índice sempre começa com 0 (zero) e termina com o tamanho (lenth) -1. Ou seja, tem 8 caracteres de 0 a 7.
Aqui os escolhemos todos os índices do início [0] até [2]
>>> a[:2]
'KA'
Aqui escolhemos todos os índices maiores que dois até o fim na string
>>> a[2:]
'KAROTO'
Aqui escolhemos os quatro último índices.
>>> a[-4:]
'ROTO'
Aqui escolhemos todos os índices do início até o quarto último.
>>> a[:-4]
'KAKA'
Aqui escolhemos todos os índices, do primeiro [0] até o índice do tamanho total da string [len(a)]. O resultado é mesmo que se não especificássemos os índices, mas é de cunho didático.
>>> a[0:len(a)]
'KAKAROTO'
Aqui escolhemos do terceiro índice o tamanho total da string menos dois (total-2).
>>> a[3:len(a)-2]
'ARO'
Para entender direitinho essa coisa de índice, veja a imagem lá em cima, ok?
Mas e se eu receber a string invertida???
Aí tem esse comando:
>>> b='ATEGEV'
>>> b[::-1]
'VEGETA'
Nossa! Que máximo!!! Ficou fácil inverter, hein?
ÔPA! Péraí caceta! Fui inverter minha string de um resultado em HEX, deu errado!
Não se desespere! Vamos ver:
>>> h = hex(2341522)
>>> h
'0x23ba92'
>>> h[::-1]
'29ab32x0'
Realmente não deu muito certo. O que fazer?
Vamos lá.
Aqui utilizaremos uma biblioteca chamada binascii. Informações aqui e aqui.
>>> h= hex(2341522)
>>> h
'0x23ba92'
>>> h.split('x')[1]
'23ba92'
>>> h=h.split('x')[1]
>>> h
'23ba92'
>>> import binascii
>>> result=binascii.unhexlify(h[0:len(h)].encode())
>>> result
b'#\xba\x92'
>>> result[::-1]
b'\x92\xba#'
>>> result=binascii.unhexlify(h.encode())
>>> result
b'#\xba\x92'
>>> result=hexlify(result[::-1]).decode()
>>> result
'92ba23'
Vixxx Maria!!! Quanta informação!!!
Vamos com calma.
A parte do split, já vimos em um post anterior.
A parte do binascii.hexlify, transformou a string em um hexadecimal 'binário'. Daí, quando invertemos com o [::-1], ao invés de inverter cada um dos caracteres, invertemos os bytes (conjuntos de oito bits).
A parte do binascii.unhexlify transfmormou o hexadecimal 'binário' em uma string novamente.
Tão lindo, não é?
Assinar:
Postagens (Atom)

