我有一个列表,我想找到任何以伊朗开头的词的索引,并打印出来。
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‘和’',但我需要任何包含伊朗的单词
发布于 2018-06-11 07:18:33
也许你可以使用
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
发布于 2018-06-11 07:22:56
正如我已经提到的--问题出在列表到字符串的转换中。当您在pytz.all_timezones
上调用str()
时,您将获得列表的字符串表示形式,包括所有标点符号。因此,当您调用split
时-结果列表中的每个单词(第一个除外)都以'
字符开头。
尝试像下面这样直接迭代pytz.all_timezones
:
for index, zone in enumerate(pytz.all_timezones):
if zone.lower().startswith(word):
print(index)
发布于 2018-06-11 07:23:31
代码不能正常工作的原因是您正在将列表转换为字符串,因此方括号和撇号也会呈现到字符串中。
因此,与伊朗相关的时区实际上是字符串:"' iran ',“。因为字符串的第一个字母是撇号,所以当您调用t.startswith(word)时,它不匹配。
我认为转换为字符串的目的是为了让您可以将所有单词转换为小写。实现这一目标的更好方法是:
timezones = [tz.lower() for tz in pytz.all_timezones]
https://stackoverflow.com/questions/50788809
复制相似问题