Найти индекс слова в строке в Python - PullRequest
0 голосов
/ 11 июня 2018

У меня есть список, и я хочу найти индекс любых слов, начинающихся с Ирана, и распечатать их.

import pytz
word = 'iran'
text = str(pytz.all_timezones).lower()
for t in text.split():
    if t.startswith(word):
       print(text[t.index(word)])

выводом является 'a' и ',' но мне нужно любое слово, содержащее iran

Ответы [ 3 ]

0 голосов
/ 11 июня 2018

Как я уже упоминал, проблема в вашем списке преобразования строк.Когда вы звоните str() на pytz.all_timezones - вы получаете строковое представление списка, включая все знаки препинания.Таким образом, при вызове split - каждое слово (кроме первого) в результирующем списке начинается с символа '.

Попробуйте выполнить итерацию pytz.all_timezones непосредственно, как этот фрагмент:

for index, zone in enumerate(pytz.all_timezones):
    if zone.lower().startswith(word):
        print(index)
0 голосов
/ 11 июня 2018

Причина, по которой ваш код не работает, заключается в том, что вы преобразуете список в строку, и поэтому квадратные скобки и апострофы также отображаются в строке.
Таким образом, часовой пояс, относящийся к iran, на самом делеСтрока: "Иран",.То есть первая буква строки является апострофом, поэтому, когда вы вызываете t.startswith (word), она не совпадает.
Я полагаю, что цель преобразования в строку состояла в том, чтобы вы могли повернуть всеслова в нижнем регистре.Лучшим способом достижения этого было бы:

timezones = [tz.lower() for tz in pytz.all_timezones]
0 голосов
/ 11 июня 2018

Возможно, вы можете использовать

import pytz
word = 'iran'
text = [x.lower() for x in pytz.all_timezones]
for t in text:
    if t.startswith(word):
        print(text.index(t))

Понимание списка, а lower() - для создания списка, элементами которого являются строки.

Эти элементы проверяются с помощью startswith() иесли его возвращаемое значение равно True, его индекс печатается с index().

Вывод:

507
...