查找其中一个替代关键字的索引

时间:2015-07-03 05:16:39

标签: python

我有一个输入字符串,如下所示:

input_string = "word1 word2 word3 word5 key1 word6 word7"

我必须检查它是否包含给定关键字列表之一

keywords = ['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只有解决方案没问题。

3 个答案:

答案 0 :(得分:3)

您可以使用列表理解

>>> [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]

答案 1 :(得分:2)

如果你只想要第一个idx:

for idx, value in enumerate(input_string.split()):
    if value in keywords:
        break
else:
    idx = None
仅当else在没有for

的情况下完成时,

break才会处理

答案 2 :(得分:0)

这将为您提供字符串中键的索引列表:

indexes = [input.index(key) for key in keys if key in input]
相关问题