如何在Python中引用列表中的下一项?

时间:2014-05-01 10:45:15

标签: python

我对Python很新,我正在尝试组建一个马尔可夫链生成器。给我带来问题的一点是专注于将列表中的每个单词添加到字典中,与紧随其后的单词相关联。

def trainMarkovChain():
    """Trains the Markov chain on the list of words, returning a dictionary."""
    words = wordList()
    Markov_dict = dict()
    for i in words:
        if i in Markov_dict:
            Markov_dict[i].append(words.index(i+1))
        else:
            Markov_dict[i] = [words.index(i+1)]
    print Markov_dict

wordList()是一个将文本文件转换为单词列表的上一个函数。听起来是什么感觉。我收到一个错误,说我不能连接字符串和整数,指的是words.index(i + 1),但是如果那不是如何引用下一个项目那么是怎么回事它完成了吗?

4 个答案:

答案 0 :(得分:2)

下面的代码,简化了一下,应该产生你需要的东西。如果需要解释的话,我会详细说明。

words = 'Trains the Markov chain on the list of words, returning a dictionary'.split()
chain = {}
for i, word in enumerate(words):
    # ensure there's a record
    next_words = chain.setdefault(word, [])
    # break on the last word
    if i + 1 == len(words):
        break
    # append the next word
    next_words.append(words[i + 1])

print(words)
print(chain)

assert len(chain) == 11
assert chain['the'] == ['Markov', 'list']
assert chain['dictionary'] == []

答案 1 :(得分:2)

你也可以这样做:

for a,b in zip(words, words[1:]):

这将在列表中指定一个元素,并将b指定为下一个元素。

答案 2 :(得分:0)

def markov_chain(list):
    markov = {}
    for index, i in enumerate(list):
        if index<len(list)-1:
            markov[i]=list[index+1]

    return (markov)    

上面的代码将列表作为输入,并将相应的markov链作为字典返回。

答案 3 :(得分:0)

您可以使用循环来实现这一点,但是当您只需要下一个元素时,将其余代码放入循环中实际上是一种浪费。

有两个不错的选择可以避免这种情况:

选项1-如果您知道下一个索引,只需调用它:

my_list[my_index]

虽然大多数时候您都不知道索引,但是您仍然可能希望避免使用 for循环


选项2-使用iterators

& check this tutorial

my_iterator = iter(my_list)
next(my_iterator)    # no loop required