如何在python的”in”语句中获取索引

How to get the index in the 'in' statement in Python

本问题已经有最佳答案,请猛点这里访问。

我写了一篇if声明,比如:

1
2
if word in vocab:
    print word

不过,我还想知道vocab中匹配的word指数。

在Python中有什么方法可以做到这一点吗?

我刚刚提出了一个使用vocab.index(word)来获取索引的解决方案,但是这样会对数组进行两次检查(一次在if语句中,一次调用index())。我想应该有更有效的方法。

谢谢。


为了避免一个循环,可以使用try-except子句(不使用if ... in ...:子句)

1
2
3
4
5
try:
    i = vocab.index(word)
except ValueError as e:
    print e # Optional
    i = -1


1
2
3
4
def getindex(iterable,target):
    for idx,value in enumerate(iterable):
        if value==target: return idx
    return -1

注意,如果您试图在字符串中查找子字符串(正如我假设的那样,因为您正在执行if word in vocab),那么这将不起作用。在这种情况下,你真的应该这样做:

1
2
3
try: idx = iterable.index(target)
except ValueError as e: # Not found
    # Handle it

如果您尝试使用上面的getindex函数,它将始终返回-1的任何值len(target) > 1,因为它将把您的iterable分解为其最小迭代,即字符串的字母。


在这种情况下,我希望可以在if语句中进行赋值,但我不能这样做,这就是解决方案:

如果vocablist的话:

1
2
3
4
5
6
try:
    index = vocab.index(word)
except ValueError:
    pass
else:
    print index, word

如果vocabstr

1
2
3
index = vocab.find(word)
if index >= 0:
    print index, word


你应该看一下Python的列举

编辑:下面举例说明:

1
2
3
for i, j in enumerate(vocab):
if j == word:
    print (i, j)