在 python 中的字符串中查找单词索引
Find word index in string in python
我有一个列表,我想找到所有以 Iran 开头的单词的索引并打印它们。
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' 和 ',' 但我需要任何包含伊朗的单词
也许你可以使用
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()
检查,如果它的return值是True
,它的索引用index()
打印。
输出:
507
正如我已经提到的 - 问题出在您的列表到字符串的转换中。
当您在 pytz.all_timezones
上调用 str()
- 您将获得列表的字符串表示形式,包括所有标点符号。因此,当您调用 split
- 结果列表中的每个单词(第一个单词除外)都以 '
字符开头。
尝试像下面的片段一样直接迭代 pytz.all_timezones
:
for index, zone in enumerate(pytz.all_timezones):
if zone.lower().startswith(word):
print(index)
您的代码不起作用的原因是您正在将列表转换为字符串,因此方括号和撇号也被渲染到字符串中。
所以与伊朗有关的时区实际上是字符串:“'iran',”。那就是字符串的第一个字母是撇号,所以当你调用t.startswith(word)时,它不匹配。
我认为转换为字符串的目的是让您可以将所有单词转换为小写。实现此目的的更好方法是:
timezones = [tz.lower() for tz in pytz.all_timezones]
我有一个列表,我想找到所有以 Iran 开头的单词的索引并打印它们。
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' 和 ',' 但我需要任何包含伊朗的单词
也许你可以使用
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()
检查,如果它的return值是True
,它的索引用index()
打印。
输出:
507
正如我已经提到的 - 问题出在您的列表到字符串的转换中。
当您在 pytz.all_timezones
上调用 str()
- 您将获得列表的字符串表示形式,包括所有标点符号。因此,当您调用 split
- 结果列表中的每个单词(第一个单词除外)都以 '
字符开头。
尝试像下面的片段一样直接迭代 pytz.all_timezones
:
for index, zone in enumerate(pytz.all_timezones):
if zone.lower().startswith(word):
print(index)
您的代码不起作用的原因是您正在将列表转换为字符串,因此方括号和撇号也被渲染到字符串中。
所以与伊朗有关的时区实际上是字符串:“'iran',”。那就是字符串的第一个字母是撇号,所以当你调用t.startswith(word)时,它不匹配。
我认为转换为字符串的目的是让您可以将所有单词转换为小写。实现此目的的更好方法是:
timezones = [tz.lower() for tz in pytz.all_timezones]