我有一个输入字符串,看起来像:
input_string = "word1 word2 word3 word5 key1 word6 word7"
我必须检查它是否包含给定关键字列表中的一个
关键字 = ['key1', 'key2', 'key3']
并将变量的值设置为字符串中该关键字的索引,否则为 None。例如。在上面的 input_string 中,它将是 4。
我目前的解决方案是这样的:
try:
key_index = input_string.split().index(filter(lambda x: x in input_string.split(), keywords).__next__())
return_value = key_index
except (StopIteration, ValueError):
return_value = None
替代的迭代版本如下所示:
n = 0
return_value = None
words = input_string.split()
for w in words:
if w in keywords:
return_value = n
break
else:
n += 1
或者:
return_value = None
for k in keywords:
if k in input_string.split():
try:
return_value = input_string.split().index(k)
except ValueError:
pass
对于这样一个简单的问题,所有这些解决方案似乎都有些笨拙。我正在寻找更优雅的解决方案,最好是功能性的。只有 python3.x 的解决方案是可以的。
请您参考如下方法:
你可以使用列表理解
>>> [i for i, j in enumerate(input_string.split()) if j in keywords]
[4]
>>>
你也可以使用index
>>> [input_string.split().index(i) for i in keywords if i in input_string.split()]
[4]
