获取另一个列表中包含的列表中第一个元素的索引?

时间:2020-10-09 10:41:54

标签: python

我有两个清单。一个是选定标点的列表,另一个是令牌的列表。

punc = ['.', '!', '?']

tokens = ['today', 'i', 'went', 'to', 'the', 'park', '.', 'it', 'was', 'great', '!']

如何获取令牌中出现的第一个标点符号(由列表punc定义)?

在上述情况下,由于出现的第一个标点是'.',因此我的期望输出是 index = 6

2 个答案:

答案 0 :(得分:2)

解决您问题的方法就是这样

punc = ['.', '!', '?']

tokens = ['today', 'i', 'went', 'to', 'the', 'park', '.', 'it', 'was', 'great', '!']

for i, element in enumerate(tokens):
    if element in punc:
        print(f"Found {element} at index: {i}")
        break

我们在这里所做的是使用enumerate遍历令牌,该枚举返回索引和元素。对于循环中的每次迭代,如果您找到了第一个元素,我们都会检查该元素是否在“ punc”中。

答案 1 :(得分:2)

您可以使用tokens列表中的index()来做到这一点:

punc = ['.', '!', '?']

tokens = ['today', 'i', 'went', 'to', 'the', 'park', '.', 'it', 'was', 'great', '!']

for p in punc:
    if p in tokens:
        print(p, tokens.index(p), sep=" index is: ")
    else:
        print(p, 'not found', sep=' ')

如果存在,此代码将以令牌显示所有punc索引。

具有列表理解功能:

[print(p, tokens.index(p), sep=" index is: ") if p in tokens else print(p, 'not found', sep=' ') for p in punc]

输出:

. index is: 6
! index is: 10
? not found

如果您只想检查第一项而不是整个punc列表:

print(tokens.index(punc[0]) if punc[0] in tokens else 'not found')

输出

6

当元素不在列表中时,使用[index()]会产生ValueError异常:

Exception has occurred: ValueError
'?' is not in list

在这种情况下,?中不存在的值tokens可能会发生这种情况。

要解决此问题,您有两种简单的方法:

  • 检查该项目是否在列表中,例如:'?' in tokens(这是干净/可行的方法)
  • .index()调用包装在try/except内并进行管理。 (这是快速的方法)