2015-12-19 4 views
0

У меня есть программа, которая запрашивает у пользователя предложение, получает каждое слово и сохраняет его в списке, называемом словами.Python найти элемент заказа в списке

text = raw_input("") 
    words = map(lambda x:x.lower(), re.sub("[^\w]", " ", text).split()) 

Нравится это.

Теперь, я хочу посмотреть, какое слово имеет слово «имя». Я написал:

for listelement in words: 
     if listelement == "name": 
      name = listelement[This is what I want to find] 

Как его найти? Скорость на самом деле не вызывает беспокойства, хотя чем быстрее, тем лучше.

EDIT: Я пытаюсь получить имя пользователя, поставив фразу «Меня зовут *», отделяя его словами, обнаружение, где слово «имя» в списке, добавьте 2 к позиции «имя» и сохранение его как переменной uname.

+0

Вы имеете в виду 'i = words.index (" name ")'? – khelwood

+0

Если предложение всегда 'My name is *', тогда 'name = предложение [len (" My name is "):]' будет работать. – aleju

ответ

2

Я думаю, вы можете сделать это очень легко с

words = 'the horse and the rider'.split(' ') 
look_for = 'the' 
indices = [i for i, word in enumerate(words) if word == look_for] 
print(indices) 

Это будет печатать [0, 3]

Редактировать:

Это решение работает для нескольких случаев.

После того, как ОП имеет перефразировать свой вопрос, я хотел бы предложить что-то вроде

text = "My name is Alice and his name is Bob" 
words = text.split(' ') 
indices = [i+2 for i, word in enumerate(words) if word == 'name'] 
names = [words[i] for i in indices if i < len(words)] 
3

Используйте метод index. Это будет возвращать первый occurrance элемента в последовательности:

In [1]: string = 'this is a test' 

In [2]: words = string.split(' ') 

In [3]: words.index('is') 
Out[3]: 1 

In [4]: words.index('test') 
Out[4]: 3 

In [5]: words.index('foo') 
--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-5-7345c027ead9> in <module>() 
----> 1 words.index('foo') 

ValueError: 'foo' is not in list 
+0

Не работает должным образом, если в списке ввода имеется несколько вхождений «имя». Поэтому, если входная строка является «лошадкой и всадником», это не сработает, потому что «это» происходит дважды. –

+0

Поскольку повторения нет (возможно), и это сработало, я выбираю это как решение. –

+0

@YuBinLee Это может сработать здесь, но лучше не использовать его, если вы тестируете множество разных входных файлов. Это рабочее решение, но не расширяемое, адаптируемое решение. Так что это не хороший код. –

1

Вы можете получить позицию с помощью list.index(value)

try: 
    pos = listelement.index("name") 
except: 
    print("name not in the list") 
+0

Я немного дернулся в 'except:'. – timgeb

0

Чтобы найти индекс первого вхождения 'name' рассмотрения этого генератора,

next(i for i,w in enumerate(words) if w == 'name') 

В большинстве случаев это доказывается быстрее, чем повторение всего понимания списка.

Смежные вопросы