Autor Tópico: (NÃO Resolvido)Como verificar se uma list tem determinado valor?  (Lida 3915 vezes)

Offline Azuos

  • Usuário Ubuntu
  • *
  • Mensagens: 34
    • Ver perfil
Bom, estou escrevendo um pequeno robô que conversa com você em python, que depois de estar num estágio mais avançado de desenvolvimento planejo abrir o código e colocar no source forge.net... Mas enfim, o programa captura um raw_input do usuário, remove a pontuação e separa cada uma das palavras transformando a variável numa list.

Já achei métodos de verificar se o valor numa ordem específica numa lista, mas eu queria um jeito de verificar se algum dos valores da lista é correspondente a alguma coisa. Por exemplo, eu quero descobrir se algum dos valores da list (qualquer um) é igual a "oi".

Meu código está assim:
Código: [Selecionar]
#! usr/bin/python
# -*- encoding: utf-8 -*-
fala = raw_input("Diga algo:") #Pede que o usuário diga algo que será armazenado na variável "fala"
fala = fala.replace(".", " ") #Troca o caractere "." por um espaço
fala = fala.replace("?", " ") #Troca o caractere "?" por um espaço
fala = fala.replace("!", " ") #Troca o caractere "!" por um espaço
fala = fala.replace(",", " ") #Troca o caractere "," por um espaço
fala.split(" ") #Transforma a string "fala" em uma list separando as palavras

Eu já tentei isso:
Código: [Selecionar]
if 'oi' in falaMas com esse jeito, se algum dos valores for algo como "depois", ele vai dizer que é igual a oi.

Alguém sabe um método pra fazer isso?



« Última modificação: 15 de Maio de 2010, 10:20 por Azuos »

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Como verificar se uma list tem determinado valor?
« Resposta #1 Online: 14 de Maio de 2010, 14:45 »
Faz tempo que não vejo python (saudade boa), vê se não é alguma coisa assim que você quer:

import re

str = raw_input('Fala:').lower()

if re.match('qqrcoisa', str):
      blablabla

-----------
Da documentação do python

re.match("c", "abcdef")  # No match
re.search("c", "abcdef") # Match
<_sre.SRE_Match object at ...>

Offline Azuos

  • Usuário Ubuntu
  • *
  • Mensagens: 34
    • Ver perfil
Re: Como verificar se uma list tem determinado valor?
« Resposta #2 Online: 14 de Maio de 2010, 15:06 »
Não é exatamente isso. O match só acha o "oi" se esta for a primeira palavra, enquanto o search continua achando o depois.

E esse método procura na string, eu quero procurar numa lista.

Uma lista tem vários valores, não é? Por exemplo:
Lista 1
Código: [Selecionar]
lista = ['a', 'b', 'c']Lista 2
Código: [Selecionar]
lista = ['d', 'e', 'f']
Eu quero um método pra verificar se algum dos valores da lista é igual a c em uma condição, na lista 1 do meu exemplo a condição seria verdadeira e na 2 falsa. Será que deu pra entender? Acho que não sou muito bom pra explicar.

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Como verificar se uma list tem determinado valor?
« Resposta #3 Online: 14 de Maio de 2010, 15:51 »
É eu não devo estar compreendendo mesmo... já que o que eu intendi dá para perfeitamente usar o meu exemplo.

Código: [Selecionar]
import re

lista = ['Hoje', 'está', 'ensolarado']

for palavra in lista:
    if re.match(palavra,'ensolarado'):
        .
        .
        .


Offline Azuos

  • Usuário Ubuntu
  • *
  • Mensagens: 34
    • Ver perfil
Re: Como verificar se uma list tem determinado valor?
« Resposta #4 Online: 14 de Maio de 2010, 16:54 »
O seu exemplo funciona, mas ele tem um mesmo problema do outro: ele reconhece uma sequência de letras mesmo que o valor não seja isso. No exemplo que eu dei, quero verificar se existe a palavra "oi" em algum valor, se tiver um valor com a palavra depois, ele diz que sim, existe um valor com a palavra oi. Mas você ajudou muito.

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: Como verificar se uma list tem determinado valor?
« Resposta #5 Online: 14 de Maio de 2010, 17:35 »
Você está usando de forma errada, mostrei um único exemplo. O do uso do re.match. E ele vai diferenciar tudo. Testa no interpretador:

Usando de base o seu exemplo(cópia do interpretador):

Código: [Selecionar]
Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> re.match('oi','depois')
>>> re.match('depois','oi')
>>> re.match('oi','depOIs')
>>> re.match('DEPoiS','oi')
>>> re.match('oi','oi')
<_sre.SRE_Match object at 0xb73e9db0>
>>> re.match('depois','depois')
<_sre.SRE_Match object at 0x94c7250>
>>>

Viu, só foi verdadeiro quando era realmente igual. Ele só não diferencia espaços depois da palavra, então 'oi' e 'oi ' são iguais.
« Última modificação: 14 de Maio de 2010, 17:38 por irtigor »

Offline Azuos

  • Usuário Ubuntu
  • *
  • Mensagens: 34
    • Ver perfil
Re: (NÃO Resolvido)Como verificar se uma list tem determinado valor?
« Resposta #6 Online: 15 de Maio de 2010, 10:23 »
Achei que tinha dado certo, mas ele só dá verdadeiro se for o primeiro valor, caso o contrário ele não acha =P Tava dando uns erros fui ver na documentação do python e olha só:

Citação de: Documentação do Python
match checks for a match only at the beginning of the string

Offline Imoogi

  • Usuário Ubuntu
  • *
  • Mensagens: 10
    • Ver perfil
Re: (NÃO Resolvido)Como verificar se uma list tem determinado valor?
« Resposta #7 Online: 15 de Maio de 2010, 16:31 »
cara! acho q vc ta fazendo errado
olha só

Código: [Selecionar]
import re

lista = ['depois', 'dois', 'pois', 'oi', 'arroiz']

for n in lista:
     if re.match(n, 'oi'):
           print 'sim'
só vai imprimir uma vez 'sim', pq só existe um 'oi', no lugar do print sim vc coloca o codigo q vc quer rodar
funciona direitinho, sem misterio

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: (NÃO Resolvido)Como verificar se uma list tem determinado valor?
« Resposta #8 Online: 22 de Maio de 2010, 14:30 »
cara! acho q vc ta fazendo errado
olha só

Código: [Selecionar]
import re

lista = ['depois', 'dois', 'pois', 'oi', 'arroiz']

for n in lista:
     if re.match(n, 'oi'):
           print 'sim'
só vai imprimir uma vez 'sim', pq só existe um 'oi', no lugar do print sim vc coloca o codigo q vc quer rodar
funciona direitinho, sem misterio

Se não der certo: Sendo o critério uma regular expression, não poderia usar "^oi$"?

http://docs.python.org/library/re.html

Outra coisa... não é mais fácil usar:

Código: [Selecionar]
try:
  n = lista.index('oi')
except:
  n = -1

[]s
« Última modificação: 22 de Maio de 2010, 14:46 por fpissarra »

Offline José Vitor

  • Usuário Ubuntu
  • *
  • Mensagens: 33
    • Ver perfil
Re: (NÃO Resolvido)Como verificar se uma list tem determinado valor?
« Resposta #9 Online: 22 de Maio de 2010, 15:09 »
Hummm, eu não conheço Python (na verdade, eu não gosto de Python), mas como esse negócio está se arrastando resolvi me intrometer:

Código: [Selecionar]
#!/usr/bin/python

lista = ['depois', 'dois', 'pois', 'oi', 'arroiz']

if 'oi' in lista:
   print 'yes'
else:
   print 'no'

O operador in é usado para verificar se uma expressão faz parte de uma lista...não seria isto que vocês estão querendo ?