segunda-feira, 26 de julho de 2010

Estruturas de Dados em Python - Listas

Olá pessoal! Depois de uma longa maratona pra acertar meu Sistema Operacional, consegui acertar o Slackware Linux, e agora tá tudo certo! Vamos Retomar as Postagens!

Hoje, como havia falado no último post sobre estruturas de dados, vou falar hoje sobre Listas em Python.

Listas são conjuntos ordenados de dados. Em python, estes conjuntos podem conter vários tipos de dados misturados, visto que tudo em Python é objeto.

Assim, além de tipos de dados básicos como inteiros, decimais e caracteres, as listas podem conter qualquer outro objeto da linguagem.

Vejamos como as listas são criadas em python:

# Criando uma lista vazia
l = []

#Criando uma lista já com valores
l1 = [1, 2, 3, 'a', 'd', l]

#Criando uma lista de letras a partir de uma string
l2 = list("abracadabra")

No primeiro comando, criamos uma lista vazia, que poderá ser preenchida futuramente. Em seguida, criamos uma lista, já atribuindo valores no momento da criação.

Perceba que ao criar a lista são passados valores inteiros, letras e a lista que foi criada vazia anteriormente. Assim, demonstramos que uma lista pode receber qualquer tipo de objeto, e que pode ter objetos de tipos diferentes ao mesmo tempo!

Na lista três, utilizamos a função list() para transformar uma string em uma lista.

Mas, as listas em Python não são estáticas. Podemos inserir e retirar valores conforme bem quisermos a qualquer hora durante a execução do programa. Vejamos:

#vamos acrescentar valores à lista l criada anteriormente
# append(o) insere um objeto o no final da lista
l.append(1) # a lista ficará assim [1]
l.append(3) # a lista ficará assim [1, 3] 
 
# insert(i, o), insere o objeto o na posição i (a primeira posição é zero)
l.insert(1, 2) # a lista ficará assim [1, 2, 3]
l.insert(0, 5) # a lista ficará assim [5, 1, 2, 3]
 
# remove(o) remove a primeira ocorrência do objeto o
l.append(5) # a lista ficará assim [5, 1, 2, 3, 5]
l.remove(5) # a lista ficará assim [1, 2, 3, 5]
 
# pop(i) remove e retorna o objeto da posição i
# pop() remove e retorna o último elemento da lista
l.insert(3, 6) # a lista ficará assim [1, 2, 3, 6, 5]
l.pop(3) # a lista ficará assim [1, 2, 3, 5] e retornará 6
l.pop() # a lista ficará assim [1, 2, 3] e retornará 5
 
#index(o) retorna o índice do objeto o
l.index(3) # retorna 2
l.append(3) # a lista ficará assim [1, 2, 3, 3]
l.index(3) # continua retornando 2 pois é a primeira ocorrência do 3
 
# count(o) conta quantas vezes o objeto o aparece na lista
l.count(1) # retorna 1
l.count(3) # retorna 2
l.pop() # a lista ficará assim [1, 2, 3] e retorna 3
 
# extend(L) estende a lista com a lista L
l.extend([0, -1, -2]) # a lista ficará assim [1, 2, 3, 0, -1, -2]
 
# sort() organiza os itens da lista nela mesma
l.sort() # a lista ficará assim [-2, -1, 0, 1, 2, 3]
 
# reverse() inverte os elementos da lista nela mesma
l.reverse() # a lista ficará assim [3, 2, 1, 0, -1, -2]

Agora é hora de treinar!

Abram o terminal, e comecem a brincar com as listas! Vejam como funcionam os comandos!

Uma dica! o comando help mostra informações sobre um comando! Experimente, após criar uma lista l, o comando:
>>> help(l.sort)

No próximo post tem muito mais!

Um desafio!

Quem imagina como fazer uma matriz em Python usando o que vimos hoje???

Deixe sua resposta nos comentários!

Comentem!

Assinem o Feed e não percam nenhum Post do Programe em Python!

Abraço!

66 comentários:

  1. como atribuir uma lista em uma lista . Exemplo:

    lista1 = lista2;

    porem, toda vez que eu mudo somente o valor da lista2 dentro de um for, mesmo que a lista1 e a atribuição esteja fora desse for, os valores sao alterados em ambas as variaveis. Porque? Como fazer pra nao alterar o valor da lista1 dentro desse for?

    ResponderExcluir
  2. Fala amiguinho! Pode colocar seu nome na próxima, hehe ter dúvida não faz mal a ninguém!

    Quando vc faz lista1=lista2 você esta falando que as duas variáveis se referem ao mesmo objeto, por isso quando vc muda uma a outra também se altera.

    Pra alterar somente uma, faz assim:
    lista1=lista2[:]

    Assim, vc faz lista1 ser uma cópia de lista2 e não o próprio lista2.

    Abraços!

    ResponderExcluir
  3. estou fazendo um programa para remover um determinado intervalo em uma lista estática, e após eu fazer esse determinado intervalo receber None, eu preciso colocar os Nones à direita nesta lista. Não consigo resolver esse problema pois por ela ser estática está dificultando muito...

    ResponderExcluir
  4. Oi Gabriel, tudo bem? Não sei se entendi bem seu problema... Você precisa manter o tamanho da lista inalterado, é isto?

    Não faz muito sentido fazer isto em python, mas tá com cara de exercício de aula...

    Me manda no email o que vc fez que eu vejo se entendo o que você precisa.

    Abraço!

    ResponderExcluir
  5. por genteleza alguem sabe qual a funcao para somar os elementos de uma lista . assim [1,2,3,4,5,6] soma todos esses elementos que dar 21. ? desde ja agradeco.

    ResponderExcluir
    Respostas
    1. Olá ipprogrma!

      Para isto, existe a função sum.

      Por exemplo, se você tem a lista a, faça sum(a).

      Obrigado pelo comentário!

      Excluir
  6. queria criar uma matriz vazia de tamanho 3x3 fazendo assim:

    lista = [[None]*3]*3

    for i in range (len(lista) ):

    for j in range (len(lista[i])):
    lista [i] [j] = int(input("digite"))


    print(lista)

    mas digitando assim:
    digite1
    digite2
    digite3
    digite4
    digite5
    digite6
    digite7
    digite8
    digite9

    os resultados foram assim:

    [[7, 8, 9], [7, 8, 9], [7, 8, 9]]

    o que tem errado? pode me ajudar?

    ResponderExcluir
    Respostas
    1. Olá Luiz!

      O problema com seu código é o seguinte:

      Quando você faz [[None]*3]*3 você está criando uma lista de três posições com None e clonando esta lista 2 vezes, então no lugar de ter [lista1, lista2,lista3] você tem [lista1,lista1,lista1]

      Assim os valores de todas as linhas da matriz são os três últimos atribuídos.

      Pra criar um objeto diferente pra cada posição da matriz crie assim:

      matriz = [[None for i in range(3)] for i in range(3)]

      Esta tecnica que usei se chama List Comprehention e é uma das formas mais importantes de manipular listas:D

      Espero ter ajudado!

      Abraço!

      Excluir
    2. Obrigado, procurei em vários sites e não achei nada.
      Vc sabe como fazer a entrada de dados com interface gráfica?(como o JOptionPane do java)

      Excluir
    3. Bom, o python não tem uma API de interface padrão como o java tem a swing, então você tem várias opções.

      Eu particularmente gosto muito de usar pyqt4 e pyside mas também existem wxpython e pygtk que são excelentes!

      Excluir
    4. obrigado...mas se não for pedir muito...poderia me dar um exemplo de entrada de um inteiro e o que tenho que importar...começei a estudar python ontem e não sei quase nada ainda...

      Excluir
    5. Na verdade, a explicação não é tão simples como importar o JOptionPane e usar, como falei, Python não tem uma biblioteca gráfica padrão como o Java tem, então, você tem que instalar a bibliotevca e aprender a usá-la. Aqui vai um bom tutorial sobre pyqt4 que pode te ajudar.

      http://zetcode.com/tutorials/pyqt4/dialogs/

      Excluir
    6. agora entendi o que disse...para criar um janela em python não é tão simples quanto o java..pois vc tem que criar os botões e as janelas,etc...é isso?
      vc sabe se tem como usar o programa QtCreator para janelas em python?

      Excluir
  7. Então, Luiz, dá pra fazer com diálogos, mas não compensa... Dá pra usar qtcreator, depois usa o pyuic pra gerar o código em python. talvez neste tutorial que te passei tenha isto, dá uma olhada aí... tem a documentação oficial do PyQt4 também.

    Espero ter ajudado!

    ResponderExcluir
  8. Gostaria de saber como eu faço para descobrir em uma lista, qual o numero que tem em maior quantidade na lista.

    ResponderExcluir
    Respostas
    1. Olha só, no objeto lista vc tem o método count, ele te retorna o número de repetições de um elemento.

      E você pode criar um objeto que só contenha os objetos, sem considerar as repetições criando um objeto set.

      Abaixo a primeira forma que pensei pra te responder. Não posso dizer que será a melhor forma, mas funcionará perfeitamente pra qualquer lista.

      lista = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
      resposta = {}
      for x in set(lista):
      resposta[x]=lista.count(x)

      Você terá no objeto resposta um dicionário contendo o valor como chave e a contagem como valor.

      Espero que tenha ajudado!

      Abraço!

      Excluir
    2. Aqui não apareceu, mas o "resposta[x]=lista.count(x)" deve estar identado pois está dentro do for

      Excluir
    3. A partir do momento que você tem este dicionário, você pode fazer muitas coisas, inclusive encontrar o elemento mais frequente.

      Excluir
    4. No tutorial da documentação onde fala das esruturas de dados tem exemplos bastante interessantes que talvez possam te ajudar também a entender melhor cono usá-las.

      Excluir
  9. Olá Julio!
    estou com uma lista de exercícios para resolver e estou com muita dificuldade
    vc poderia me ajudar?

    ResponderExcluir
    Respostas
    1. Me envia um email dando mais detalhes e se puder eu te ajudo sim.

      Obrigado pelo comentário ;)

      Excluir
  10. Júlio, me dá um help aqui. Se eu tenho uma lista l=[1,2,3,4,5], e quero eliminar um "item", eu sei que l.remove(A) remove a primeira ocorrência de A e que l.pop(A) remove a posição A e retorna o se conteúdo. Gostaria de saber se tem algum modo de eu remover a posição A mas sem retornar o conteúdo. Entende? Por exemplo, tenho l=[1,2,3,4,5], quero excluir a posição 3, mas NÃO quero que retorne nada (que no caso retornaria o 4). Há alguma forma de fazer isso? Desde já, grato!

    ResponderExcluir
    Respostas
    1. Olá Mateus! Na realidade, basta você ignorar o retorno do pop... se você não atribui ele a nada é como se não houvesse retornado ;)

      Qualquer coisa, pergunte aí!

      Abraço!

      Excluir
    2. Acho que eu estava fazendo alguma besteira. Logo após ter postado aqui, fui mexer no código e funcionou =P hehehe. Mas obrigadão mesmo assim! E parabéns pelo blog ;]

      Excluir
    3. Imagina. sem problemas! Eu que agradeço o comentário!

      Excluir
  11. Olá Julio!
    Estou cm duvidas em uma questao de listas, gostaria que voce me ajudasse.
    Questão: Faça uma função que recebe uma lista de strings, se a lista tem mais de 5 elementos retorna uma nova lista com os cinco primeiros, se a lista inicial tem menos de 5 elementos o ultimo elemento é novamente adicionado até que a lista tenha 5 elementos, após isso retorna a lista com 5 elementos.
    Desde já agradeço!

    ResponderExcluir
    Respostas
    1. Amigão, não vou resolver o exercício pra você, né? Me fala exatamente qual a sua dúvida que eu te ajudo!

      Excluir
    2. Uma dica: use slices para pegar parte da lista, por exemplo
      x = [1, 2, 3, 4]
      x[:3]
      [1, 2, 3]

      o tamanho da lista você pega com a função len, tipo len(x) que retornaria 4, neste caso

      Boa sorte!

      Abraço!

      Excluir
  12. Júlio estou com algumas dúvidas nessa questão e gostaria de ver a resolução, se possível.

    Faça uma função que receba 2 números inteiros e retorne uma lista com 5 elementos em que:
    - O primeiro elemento é a soma dos dois argumentos;
    - O segundo elemento é o produto dos dois argumentos somado com o primeiro elemento;
    - O terceiro elementos é resultado da soma do primeiro elemento com o resultado da subtração do primeiro argumento no segundo multiplicado pelo segundo elemento;
    - O quarto elemento é a soma do primeiro com o produto do segundo pelo resultado da subtração do terceiro na divisão do segundo argumento pelo primeiro;
    -O quinto elemento é a raiz terça do quadrado do 4º elemento.

    Muito Obrigado.

    ResponderExcluir
    Respostas
    1. Olha, fica difícil te ajudar se não diz exatamente qual a dúvida, não vou resolver o seu exercício. A ideia de exercícios geralmente e da pessoa aprender, não copiar ;)

      Mas, simplificando as coisas, simplesmente gere os resultados e insira-os numa lista. Se você leu este artigo vai saber como fazer!

      Abraço!

      Excluir
  13. Amei o blog, td muito bem explicado. parabéns pela iniciativa. Muito bom mesmo.

    ResponderExcluir
  14. Muito obrigado Maria!

    Qualquer dúvida ou sugestão será bem vinda!

    Abraço!

    ResponderExcluir
  15. Como faço pra mostrar todo o conteudo da lista, exemplo.
    Tenho um código onde
    for MatchResponse in command.split('\n'):
    if "Response Time" in MatchResponse:
    ResponseTimeFluxo = []
    ResponseTimeFluxo = MatchResponse.split(' ')[3]
    else:
    if "Test: " in MatchResponse:
    id_fluxo = []
    id_fluxo = MatchResponse.split(' ')[2]
    # print MatchResponse.split(' ')[2]
    finally:
    print "ResponseTime = %s, id_fluxo=%s" %(ResponseTimeFluxo, id_fluxo)

    Da forma acima, ele me mostra somente o ultimo registro da lista, existe uma forma de eu gravar tudo em uma lista e apresentar de forma repetida, a saida esperada é:

    ResponseTime = xpo, id_fluxo=xpto
    ResponseTime = xpoz, id_fluxo=xptoz (até a lista acabar.

    Podem me ajudar?

    ResponderExcluir
    Respostas
    1. Olá! Espero que esteja gostando do blog. Tem vários outros posts meus que podem te ajudar pelo que vi aqui. Mas te dar uma resposta mais direta, vamos analisar passo a passo que você fez:
      for MatchResponse in command.split('\n'):
      ....if "Response Time" in MatchResponse:
      ........ResponseTimeFluxo = [] #cria a lista dentro do for
      ........#sobrescreve a lista atribuindo outra coisa a ela
      ........ResponseTimeFluxo = MatchResponse.split(' ')[3]
      ....else:
      ........if "Test: " in MatchResponse:
      ...........id_fluxo = [] #aqui faz o mesmo que em cima
      ...........id_fluxo = MatchResponse.split(' ')[2]
      finally:
      ....#faz um único print onde queria printar uma lista
      ....#se desse certo ficaria "ResponseTime = [1, 2, 3]..." por exemplo
      ....print "ResponseTime = %s, id_fluxo=%s" %(ResponseTimeFluxo, id_fluxo)

      Em primeiro lugar, Finally não é um comando de continuação do for nem do if, somente do try/catch/finally.

      Este programa não deveria nem rodar...

      basta colocar o print depois do for e ele será executado sempre.

      Quanto ao algoritmo, você tem 2 erros graves.

      Instancia a lista dentro do for, então você sobrescreve ela o tempo todo. em seguida você atribui o valor à lista, sobrescrevendo novamente.

      Conforme eu explico no post acima, para inserir dados na lista você tem que usar o append, então seria lista.append(valor)

      Pra resolver isto, coloque as listas antes do for para elas serem alteradas lá dentro.

      Para printar os elementos da lista, coloque este print dentro de um for do tipo

      for (i, j) in zip(ResponseTimeFluxo, id_fluxo):
      ....print "ResponseTime = %s, id_fluxo=%s" %(i, j)

      Espero que tenha ajudado, tendo mais dúvidas, fique à vontade para perguntar.

      Abraço!

      Excluir
  16. Respostas
    1. Nada, eu que agradeço!

      Fica de olho no blog que eu espero ter novos posts em breve!

      Excluir
  17. Olá Julio, muito obrigado consegui fazer da forma que queria, porém de forma um pouco diferente, veja como fiz.

    1 Ponto, eu realmente estava fazendo errado e nem percebi sobre as listas e uso do append, isso me abriu os olhos sobre uma deficiencia que eu tinha.

    eu fiz um controle com o while, contando quantas vezes eu queria mostrar o print com as listas (isso definido pelo usuário")

    então, fiz assim.

    fiz a declaração das listas fora do for:
    ResponseTimeFluxo = []
    id_fluxo = []
    Depois eu fiz o laço for com a adição das listas.
    for MatchResponse in command.split('\n'):
    if "Response Time " in MatchResponse:
    ResponseTimeFluxo.append(MatchResponse.split(' ')[3])
    else:
    if "Test: " in MatchResponse:
    id_fluxo.append(MatchResponse.split(' ')[2])

    Depois, fora do laço, existe uma variavel que define quantos itens da lista vou mostrar,

    X = 0
    while x < count:
    print "Response_time: %s, id_fluxo: %s" %(ResponseTimeFluxo[x], id_fluxo[x])
    x = x + 1

    (essa variavel de controle, é feita por conta de uma necessidade de IDS que serão pré configurados).

    Obs: Quero lhe agradecer e dizer que seu blog é muito bom, quero acompanhar e ver novos posts :)

    Parabéns pela iniciativa e trabalho!

    ResponderExcluir
    Respostas
    1. Bom, como você tem restrição do número de linhas que vai mostrar, aí faz sentido a variável de controle, do contrário, um for iterando sobre a lista é mais eficiente.

      Só duas coisas com relação à sua implementação:
      Pra organizar melhor o código vocẽ pode usar elif no lugar de else: if:
      E, se não me engano, x +=1 é mais rápido que x = x+1, então se sua aplicação precisar de velocidade pode ser mais interessante!

      Muito obrigado pela interação aqui e qualquer outra dúvida ou sugestão é só postar ou mandar mensagem!

      Logo posto mais!

      Abraço!

      Excluir
  18. Valéria Palmeira, sem querer excluí seu comentário, mas estão aqui o comentário e a resposta.

    "Oii Julio, pesquisando para resolver um problema com listas python achei esse blog que gostei muito, tô precisando de ajuda, se possivel por favor.
    É o seguinte,
    lista = self.Proposicao.split(" ")
    x = 0
    while x <= len(lista):
    for lista[x] in self.ListaLigacao:
    if lista[x] in self.ListaLigacao:
    self.lista2.insert(x, lista[x])

    x = x + 1
    a variavel Proposicao eu passo como parametro da função e a ListaLigacao é uma variavel global, so que quando executa dá o erro: IndexError: Lis assignment index out of range.
    Não sei se apenas com esse trecho do codigo é possivel responder, mas posso mandar mais partes do codigo.Há dias que tento resolver esse probleminha, se poder ajudar eu agradeço muito."

    Bom, vamos começar pelo erro que está estourando a excessão que você menciona.
    Quando você faz while x <=len(lista) você assume que x terá os valores de 0 até o tamanho da lista inclusive, então quando ele tenta o último valor (quando x é do tamanho da lista) esta posição não existe, pois a lista vai de 0 até len(lista)-1 posições.

    faça while x<len(lista) e não terá mais a excessão.

    Outra coisa que terão problema é o "for lista[x] in self.ListaLigacao" quando você faz isto você substitui o valor de lista[x] por um elemento de self.ListaLigacao, assim sua verificação seguinte será sempre verdadeira. Verifique o que você realmente quer ali e reescreva o código.

    Espero ter ajudado!

    Fique à vontade para novas perguntas, terei mais cuidado com os comentários.

    Abraço!

    ResponderExcluir
  19. Oii Julio, realmente tudo isso que vc me explicou esta acontecendo, so que eu quero que seja feito mesmo a comparação entre o elemento do lista[x] e todos os elementos que estão na outra lista, porém nao quero que sempre retorne verdadeiro, quero que apenas retorne verdadeiro quando o elemento q esta na proposição tbm esteja na listaLigacao, para que esse elemento seja incluido na outra lista e fique guardado para ser usado posteriormente, so que ja tentei alterar de diversas formas e nao consigo.

    ResponderExcluir
    Respostas
    1. Mas então está fácil.

      você não precisa do while

      faz somente "for x in lista:"
      e verifica se x está na self.ListaLigacao

      Se estiver, você faz lista2.append(x), colocando o x no final da lista 2. O insert só é recomendável se você precisar inserir o item na posição x, o que não me parece o caso.

      Como não conheço o problema que está tentando resolver talvez não esteja dando as melhores dicas, mas espero estar ajudando!

      Qualquer coisa, estamos por aqui rs ;)

      Assim você resolve o problema...

      Sempre que acontecer isto, faz um teste de mesa, vê o que está acontecendo com cada variável que você vai enxergar a falha.

      Expero ter ajudado!

      Excluir
  20. Tô sim fazendo o teste de mesa, porem preciso de uma ferramenta de teste, e o append eu preciso porque tenho que inserir em ordem, para depois juntar todas as strings e formar uma frase, isso faz parte do 3º modulo de um trabalho que estou desenvolvendo, esse problema vai um pouco além do postado aqui, anteriormente ja havia tentando a alternativa que vc me sugeriu, muitissimo obrigada pela ajuda, acredito que ficarei usando sua boa vontade em ajudar, tem muitos tópicos interessantes nesse blog.

    ResponderExcluir
    Respostas
    1. Antes de mais nada, fico feliz de você ter gostado do blog! Estou há um tempo sem postar, mas já estou me pogramando para voltar.

      Quanto ao seu problema, se entendi você tem que ler a lista "lista", e verificar entre os elementos dela, quais se encontram em ListaLigacao, pra depois colocar em lista2 na mesma ordem em que aparecem em lista.

      Por esta óptica, basta fazer como te disse que vai funcionar.

      Se a questão for mais complexa, acho que compensa conversarmos por email, aí você me manda o enunciado do problema e eu te ajudo a encontrar a solução.

      Quanto ao teste de mesa, basta lápis e papel rs precisa de ferramenta não ;)

      Abraço!

      Excluir
  21. num1=[1,2,3,4,5]
    num2=[5,6,7,3,9]
    for i in num1:
    for j in num2:
    soma=(i+j)
    print soma

    Quero a soma dos itens dessas duas listas, porém ao executar ele mostra esse resultado:
    6
    7
    8
    4
    10
    7
    8
    9
    5
    11
    8
    9
    10
    6
    12
    9
    10
    11
    7
    13
    10
    11
    12
    8
    14
    e eu quero apenas uma , não estou encontrando o erro, por favor help

    ResponderExcluir
    Respostas
    1. Olá Maria!

      Seu código tem um erro bem simples...

      Você varre a segunda lista para cada elemento da primeira. Você tem que varrer as duas juntas.

      Tem 3 soluções pra isto:

      for (x, y) in zip(lista1, lista2):
      ....print x+y

      for i in range(len(lista1)):
      ....print lista1[i] + lista2[i]

      for x in map(lambda a, b: a+b, lista1, lista2):
      ....print x

      Você precisa percorrer as duas listas simultaneamente.

      Espero que tenha ajudado!

      Abraço!

      Excluir
  22. Oi, pergunta ! Eu tenho um lista=[1,2,3,4,0,0,0,0,0] quero fazer um média, mais entes quero excluir os zeros, como faço ?

    ResponderExcluir
    Respostas
    1. Bom, isto depende de alguns detalhes, por exemplo os zeros ficarão sempre no final da lista ou podem estar eventualmente no meio? Caso haja zeros no meio estes devem permanecer ou ser recluidos também?

      Excluir
  23. oi queria um algoritmo para inserir dados em uma lista de tamanho limitado, seguindo a política FIFO. E retirar dados desta lista de acordo com um contador de tempo predefinido, ex. Retirar pacotes (FIFO) a cada 15 segundos. podia me ajudar...

    ResponderExcluir
    Respostas
    1. Bom pra inserir e retirar objetos de uma lista é só usar insert e pop os dois métodos recebem como parâmetro a posição onde vai ser inserida ou de onde será retirado o dado.

      Pra esperar, importe a função sleep

      from time import sleep

      e faça

      sleep(15) pra esperar 15 segundos

      Espero ter ajudado!

      Abraço!

      Excluir
  24. Fala! Teu site é muito bom. Pena que nem sempre consigo acessar por causa desse erro 101 no browser. Eu tenho um exercício que talvez você possa me ajudar. É solicitada a criação de um arquivo e pede-se para escrever um texto com algumas linhas. Depois, é pedido para guardar numa lista as três últimos caracteres/letras que aparecem antes de CADA vogal.
    Eu fiz algo desse jeito:

    # Criando os arquivos
    import re
    def CriaArq3():

    ''' Esta função um arquivo e insere um texto qualquer no mesmo usando uma lista'''

    # Arquivo 1 - Recebe o texto

    Criar = open('Arquivo4.txt','a') # Criou o arquivo - opção a - Esta opção sobrescreve o conteúdo do arquivo.

    #Coloquei um texto lá para acrescentar ao arquivo

    a=('''Se voce nao aceitou o conselho, te respeito\
    Resolveu seguir ir atras, cara e coragem\
    So que voce sai em desvantagem se voce nao tem fe, se voce nao tem fe\
    Te mostro um trecho e uma passagem de um livro antigo\
    Pra te provar e mostrar que a vida e linda\
    Dura, sofrida, carente em qualquer continente\
    Mas boa de se viver em qualquer lugar\
    Rappa''')

    Criar.write(str(a))
    vogais='aeiou'

    for i in vogais:

    a= a.replace(i,'')

    x=a.split()
    print x
    print '----------------------------------------------------'
    Criar.write('\n') # Finaliza a linha
    Criar.close() # Fechando o arquivo

    # O problema pede que separe as três últimas letras antes de cada vogal. Acho que resolvi parte desse problema, mas não estou conseguindo captar essa ideia das três últimas letras antes de cada vogal. Tem algum método que possa fazer isso mais rapidamente? Será que pode me dar uma força? Grato.

    ResponderExcluir
    Respostas
    1. Bom, vamos começar hehe
      Você importa a biblioteca de expressões regulares mas não usa, é uma boa você usar sim, ok. Vai facilitar muito as coisas.

      No seu código você substitui as vogais por uma string vazia. Não acho que esta é a melhor opção.

      Quando você usa expressões regulares você vonsegue pegar grupos dentro de uma busca.

      http://aurelio.net/regex/

      Dá uma olhada nesse livro online de expressões regulares tenho certeza que vai te ajudar muito!

      Se tiver problemas fala aí que vejo como te ajudo!

      Abraço!

      Excluir
  25. Se eu tenho um labirinto em formato de matriz, como faço pra alterar o lugar de um boneco nessa matriz?
    No caso, o boneco seria um x ( um dos elementos da matriz)

    ResponderExcluir
    Respostas
    1. A idéia é que seja +- isto?

      Você fala de um labirinto tipo rogue?

      Pra alterar a posição do boneco basta você retirar o x da posição onde ele estiver e inserir na próxima posição.

      Se a dúvida for mais específica, pode detalhar mais que tento te ajudar.

      Pense que sua matriz será algo como [[0,0,x,0],[0,0,0,0]]. Neste caso, pra acessar o boneco seria lista[0][2]

      Para mudá-lo de lugar, retire-o dali e mude para lista[0][3], por exemplo, ou lista[1][2], pra andar uma casa pra direita ou para baixo respectivamente.

      Abraço!

      Excluir
  26. Como faço para ordenar uma lista sem usar o sort()?

    ResponderExcluir
    Respostas
    1. Olá, existem inúmeros métodos pra se ordenar uma lista.

      Segue abaixo um link onde pode encontrar mais informações!
      http://pt.m.wikipedia.org/wiki/Algoritmo_de_ordena%C3%A7%C3%A3o

      Excluir
  27. como posso contar quantas vezes uma palavra se repete na frase?
    ex: good for me good for you learn for forever you will do
    "for" =3

    ResponderExcluir
    Respostas
    1. Bem simples!

      x = 'good for me good for you learn for forever you will do'
      x.count('for')

      Espero ter ajudado!

      Excluir
  28. ola boa tarde eu tenho uma duvida de como mostrar só números pares na minha lista ?
    obrg

    ResponderExcluir
    Respostas
    1. Você quer dizer printar só os pares? faz um if x % 2 == 0 e printa só os que retornarem verdadeiro.

      Excluir
  29. Faça um programa que leia um número indeterminado de valores, correspondentes a notas, encerrando a entrada de dados quando for informado um valor igual a -1 (que não deve ser armazenado). Após esta entrada de dados. A minha duvida seria no caso aonde é pedido quando chegar a - 1 quando for informado eu usarei um break ? mas como fazer para ele não ser armazenado na minha lista ??

    ResponderExcluir
    Respostas
    1. Muito simples, Roger, dentro do laço, você verifica se o valor é -1, se for dá um break senão acrescenta na lista.

      Também pode usar um while valor != -1

      Abraço!

      Excluir
  30. opa, estou começando com python e estou meio perdido para criar um simples vetor..
    vamos para um exemplo bem básico... digamos que eu precise de um algoritmo onde o usuário digita 2 valores e ele mostra o vetor no final.. a forma que achei foi:

    tam = 2
    vet = [0]*tam

    for i in range(tam):
    print "Valor para posicao", i, "do vetor"
    vet[i] = input()
    print "o vetor digitado foi", vet

    gostaria de saber se tem uma forma mais simples de fazer isso? tentei definir o tamanho do vetor direto na variavel "vet" mas não consegui..

    ResponderExcluir
    Respostas
    1. Olá joão!

      Na verdade, você está pensando da forma errada! Seu programa parece que foi escrito em C com sintaze do python! hehe

      Keep it simple! Python é dinãmica, você não precisa indicar o tamanho que a lista terá.

      A forma mais simples de todas seria algo assim:

      vet = eval(raw_input('Insira um vetor na forma [elemento1, elemento2, ...]'))
      print 'O vertor difitado foi', vet

      agora se você quiser fazer interativo mesmo, faça algo assim:
      vet = []
      for i in range(2)
      ____vet.append(input('Valor para a posicao %d do vetor' % i)) #usei _ para identação
      print 'O vetor digitado foi vet'

      Dê uma lida na postagem aqui acima para entender melhor as listas.

      Qualquer coisa, pergunte novamente. Abraço!

      Excluir
  31. olá, julio

    queria saber se há a possibilidade de, a partir do input, criar uma nova lista. por exemplo:

    nome=input("Insira um nome: ")
    >>> matheus

    e então o "matheus" passar a ser uma lista, como "matheus=[]", preparada para ser utilizada

    obrigado

    ResponderExcluir
    Respostas
    1. Olá MSiquara

      Pode assim
      nome = raw_input('Insira o nome da lista:') #input para números raw_input para strings
      exec('%s=[]' % nome)

      Mas usar exec pode trazer vários problemas de segurança a uma aplicação, pois qualquer coisa que for digitada será executada como código python.

      Abraço!

      Excluir
  32. Olá Julio,
    estou fazendo uma lição e em uma das etapas eu preciso comparar os elementos de uma lista e atribuir valor 1 se eles são iguais e 0 se eles são diferentes.
    Por exemplo:
    lista=["a","b","b","c","a"]
    elemento na posição 0 é igual ao na posição 1? 0
    elemento na posição 1 é igual ao na posição 2? 1
    e assim por diante...

    A ideia é que consiga fazer isso para listas de tamanho e composição diferentes. Você tem alguma sugestão?
    Obrigado!
    Abs

    ResponderExcluir