Python 遍历元组,获得下一项

Python 遍历元组,获得下一项,python,list,loops,nlp,tuples,Python,List,Loops,Nlp,Tuples,我在获取元组中的项时遇到了一些困难。我有一个元组列表,看起来像这样(包含一个单词和一个标记): 我想做的是迭代这些元组,并确定下一个单词标记基于上一个单词标记的可能性。例如,如果我想确定“DET”出现在“名词”前面的次数,我想迭代元组并确定,例如: “DET”出现在“NOUN”前面的次数 到目前为止,我已经尝试过: prob = 0.0 for item in tuples: if item[1] == "DET" and item + 1[1] == "NOUN" return prob

我在获取元组中的项时遇到了一些困难。我有一个元组列表,看起来像这样(包含一个单词和一个标记):

我想做的是迭代这些元组,并确定下一个单词标记基于上一个单词标记的可能性。例如,如果我想确定“DET”出现在“名词”前面的次数,我想迭代元组并确定,例如:

“DET”出现在“NOUN”前面的次数

到目前为止,我已经尝试过:

prob = 0.0
for item in tuples:
   if item[1] == "DET" and item + 1[1] == "NOUN"
return prob
if
语句显然不正确。有人知道我可以做些什么来访问下一个项目吗?

使用enumerate()获取您正在循环的项目的索引:

count = 0
for index, item in enumerate(tuples[:-1]):
    if item[1] == 'DET' and tuples[index+1][1] == 'NOUN':
        count += 1

print count

将单词成对组合在一起的最简单方法是使用
zip(seq,seq[1:])
,如图所示

收集计数的最简单方法是使用

把所有这些放在一起看起来像这样:

>>> from collections import Counter

>>> Counter((f, s) for (_, f), (_, s) in zip(tuples, tuples[1:]))
Counter({('ADJ', 'NOUN'): 2, ('NOUN', 'ADP'): 2, ('NOUN', 'NOUN'): 2,
         ('DET', 'NOUN'): 2, ('DET', 'ADJ'): 2, ('ADP', 'NOUN'): 1,
         ('NOUN', 'VERB'): 1, ('NOUN', 'DET'): 1, ('VERB', 'DET'): 1,
         ('ADP', 'DET'): 1})

查看您可以使用滑动窗口迭代器从列表中生成成对的元组。快速跟进:如何防止索引超出范围错误?@Natalian Fixed。我已经做了,所以除了上学期,你可以重复整个列表
>>> from collections import Counter

>>> Counter((f, s) for (_, f), (_, s) in zip(tuples, tuples[1:]))
Counter({('ADJ', 'NOUN'): 2, ('NOUN', 'ADP'): 2, ('NOUN', 'NOUN'): 2,
         ('DET', 'NOUN'): 2, ('DET', 'ADJ'): 2, ('ADP', 'NOUN'): 1,
         ('NOUN', 'VERB'): 1, ('NOUN', 'DET'): 1, ('VERB', 'DET'): 1,
         ('ADP', 'DET'): 1})