У меня есть программа, которая запрашивает у пользователя предложение, получает каждое слово и сохраняет его в списке, который называется словами.
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.
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)]
Используйте метод 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
Чтобы найти индекс первого вхождения 'name'
, рассмотрим этот генератор,
next(i for i,w in enumerate(words) if w == 'name')
В большинстве случаев это оказывается быстрее, чем итерация по всему списку.
Вы можете получить позицию, используя list.index(value)
try:
pos = listelement.index("name")
except:
print("name not in the list")
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.