在 python 中的字符串中查找单词索引



我有一个列表,我想找到任何以伊朗开头的单词的索引并打印它们。

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"和",但我需要任何包含伊朗的单词

正如我已经提到的 - 问题出在您的列表中到字符串的转换。 当您在pytz.all_timezones上调用str()时 - 您将获得列表的字符串表示形式,包括所有标点符号字符。因此,当您调用split时 - 结果列表中的每个单词(第一个除外(都以'字符开头。

尝试直接迭代pytz.all_timezones,如下所示:

for index, zone in enumerate(pytz.all_timezones):
if zone.lower().startswith(word):
print(index)

也许你可以使用

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

代码不起作用的原因是您将列表转换为字符串,因此方括号和撇号也被呈现到字符串中。
因此,与伊朗有关的时区实际上是字符串:"'伊朗',"。这是字符串的第一个字母是撇号,所以当你调用t.startswith(word(时,它不匹配。
我认为转换为字符串的目标是您可以将所有单词转换为小写。实现此目的的更好方法是:

timezones = [tz.lower() for tz in pytz.all_timezones]

最新更新