我有一个列表,我想找到以伊朗开头的任何单词的索引并打印出来。
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的任何单词
答案 0 :(得分:3)
正如我已经提到的 - 问题在于您的列表中的字符串转换。
当您在"whatever"
上调用var x = "This is A string";
x = [] //Now the variable has been reassigned to an array.
x = {} //Now the variable has been reassigned to an object.
时,您会获得列表的字符串表示形式,包括所有标点字符。因此,当您致电str()
时 - 结果列表中的每个单词(第一个除外)都以pytz.all_timezones
字符开头。
尝试直接迭代split
,例如此代码段:
'
答案 1 :(得分:2)
也许你可以使用
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
答案 2 :(得分:1)
您的代码无法正常工作的原因是您将列表转换为字符串,因此方括号和撇号也会呈现在字符串中。
因此,与伊朗相关的时区实际上是字符串:"' iran',"。这是字符串的第一个字母是撇号,所以当你调用t.startswith(word)时,它不匹配。
我认为转换为字符串的目的是为了让你可以将所有单词转换为小写。实现这一目标的更好方法是:
pytz.all_timezones