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

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]

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

РЕДАКТИРОВАТЬ . Я пытаюсь получить имя пользователя, помещая предложение «Меня зовут *», разделяя его словами, определяя, где слово «имя» находится в списке, добавляя 2 к положение "name" и сохранение его в качестве переменной uname.

0
Yubin Lee 19 Дек 2015 в 22:12

4 ответа

Лучший ответ

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

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)]
2
AlexV 19 Дек 2015 в 21:09

Используйте метод index. Он вернет первое вхождение элемента в последовательности:

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
3
Roland Smith 19 Дек 2015 в 19:23

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

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

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

0
elm 19 Дек 2015 в 22:35

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

try:
   pos = listelement.index("name")
except:
   print("name not in the list")
1
timgeb 19 Дек 2015 в 19:30