2015-02-24 2 views
-1

Скажем, в Python У меня есть это предложение:Python, найти слово и расположение каждого символа в этом слове в строке

my_sentence = "I like to drive my car around the round block twice daily" 

И я хочу, чтобы найти слово «круглый» в этом предложении. Я знаю, что могу использовать find, index, rfind и rindex так:

print my_sentence.find('round') 
>>>24 

То, что я хочу сделать, это найти место каждой буквы в «круг» в предложении и использовать только первое вхождение слова «круглого» , Я бы хотел, чтобы он распечатывал местоположение каждой буквы «round» внутри строки. Я пытался сделать это (например, найти последнее письмо и собирается оттуда):

last_letter = my_sentence.find('round') 
last_letter2 = last_letter[-1::] 

Это приводит к ошибке. Итак, каков наилучший способ получить расположение каждой буквы слова, которая существует в строке? Я новичок в Python, и я видел, что есть способы найти, где было слово, но не каждая буква слова в строке. Как мне это сделать? Ожидаемые результаты в скобках:

r (location 24) o (25) u (26) n(27) d(28) 
+2

Что Ваш ожидаемый результат? –

+0

'last_letter' является' int'. Вы не можете использовать индексирование на 'int', следовательно, ошибка: 'TypeError: 'int' объект не имеет атрибута '__getitem __''. 'last_letter2' - это просто' last_letter + ', правильно? –

ответ

2

просто: найти первое вхождение слова, затем добавить смещение для букв.

>>> my_sentence = "I like to drive my car around the round block twice daily" 
>>> word = 'round' 
>>> pos = my_sentence.find(word) 
>>> [(c, pos + i) for (i, c) in enumerate(word)] 
[('r', 24), ('o', 25), ('u', 26), ('n', 27), ('d', 28)] 
+0

Это даст очень странные результаты, если слово 'word' не найдено в' my_sentence'. Кроме того, вы можете использовать аргумент 'start' для' enumerate', поэтому вам не нужно делать 'pos + i'. –

2

Написать вспомогательную функцию, например:

def my_find(sentence, what): 
    try: 
     start = sentence.index(what) 
     return [(ch, idx) for idx, ch in enumerate(what, start)] 
    except ValueError: 
     return [] 

Пример:

>>> my_find("I like to drive my car around the round block twice daily", "round") 
[('r', 24), ('o', 25), ('u', 26), ('n', 27), ('d', 28)] 
>>> my_find("I like to drive my car around the round block twice daily", "xyz") 
[] 

Примечание: это обрабатывает случаи, когда word находится не в my_sentence в здравом образом - другие ответы даст неожиданные результаты ...

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