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())。我想应该有更有效的方法。
谢谢。
- @sashkello不完全相同,我希望在执行if语句的同时使用'in'关键字返回索引,并说明我没有选择index()方法的原因。
- @不可能的是,in只返回真或假。另请阅读:EAFP
- @Ashwini Chaudhary我在for语句中看到了use enumerate()可以返回索引和值,所以我只想尝试一下if语句。
- 假设你有办法做到这一点。下一步你会对收到的信息做什么?你到底想做什么?
- @abnerchou基于for-loop/enumerate的解决方案与.index和.find方法相比将非常缓慢,而且btw一旦有了索引,就可以很容易地获得值。
- @Abnerchou这个问题有多种答案,它们基本上概述了你能做的一切。
- @我只是想提高效率。假设我有一千个单词,我需要将它们映射到另一个系统,我需要在两个系统中都有它们的索引。但是,如果使用"in",然后调用index()将花费太多时间来完成此操作。为什么不存在一种方法,通过一次列表返回索引和匹配的值?基督徒的回答正是我想要的。
- @萨什基洛谢谢,我只看最上面的答案。:)
- 为什么要投票??
- "如果使用‘in’,然后调用index()会花费太多的时间来执行此操作",您会想得太多。除非您的性能有问题,否则这很可能不是您想要优化的地方。你有介绍过吗?我相信胜利是微不足道的。
- @当我的数据集很小时,sashkello不会影响性能。但现在我的数据集大约有60000个字和3180000个令牌,已经需要几个小时才能完成。我只是想提高程序的速度。否则,我必须使用C++或Java。
为了避免一个循环,可以使用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分解为其最小迭代,即字符串的字母。
- 这与index函数非常相似。
- 当然,但出于某种原因,OP似乎不想使用iterable.index(target),所以我想用一个例子来展示enumerate函数。
- 谢谢你的回答。
在这种情况下,我希望可以在if语句中进行赋值,但我不能这样做,这就是解决方案:
如果vocab是list的话:
1 2 3 4 5 6
| try:
index = vocab.index(word)
except ValueError:
pass
else:
print index, word |
如果vocab是str:
1 2 3
| index = vocab.find(word)
if index >= 0:
print index, word |
- 为什么投反对票?
- 我想是因为我用的是index,而不是find。一个是用于list,一个是用于str。我不知道OP使用的是什么,但是向下投票的人期待着find(第一个版本的答案只有index)
- index也适用于字符串,但由于例外情况,它可能不如find那样方便。不管怎样,+1从我。
- @多比亚斯·库克,谢谢。由于没有例外,我也更喜欢find。太糟糕了,没有一个清单可以代替。
- 谢谢,这正是我想要的。
你应该看一下Python的列举
编辑:下面举例说明:
1 2 3
| for i, j in enumerate(vocab):
if j == word:
print (i, j) |
- 这并不能真正回答问题。你能举一个例子说明枚举有什么帮助吗?仅仅参考一些外部文档并不是这个网站的目的。
- 谢谢,我知道它在"for"语句中有效,但在"if"语句中有错误。基督徒的回答可以解决我的问题。