我有两个清单。一个是选定标点的列表,另一个是令牌的列表。
punc = ['.', '!', '?']
tokens = ['today', 'i', 'went', 'to', 'the', 'park', '.', 'it', 'was', 'great', '!']
如何获取令牌中出现的第一个标点符号(由列表punc
定义)?
在上述情况下,由于出现的第一个标点是'.'
,因此我的期望输出是 index = 6 。
答案 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
内并进行管理。 (这是快速的方法)