如何在当前索引/迭代中访问for循环中的下一个元素?

时间:2014-02-02 01:43:29

标签: python

我几乎没有学习python并试图编写一些代码,但是在尝试访问列表中的下一个元素的某些问题上运行。

以下是我的代码的一部分:

for word2 in vocab_list:
    index2 = 0
    for elem in sentence2:
        if (elem == word2 and nextElem == nextWord2)
            do something
        index2 += 1

问题出在nextElemnextWord2,如果我在当前的迭代中,如何访问它们?

3 个答案:

答案 0 :(得分:7)

您可以使用zip,这也会阻止您访问IndexError

for word2, nextWord2 in zip(vocab_list, vocab_list[1:]):
    for elem, nextElem in zip(sentence2, sentence2[1:]):
        if (elem == word2 and nextElem == nextWord2)
           #Do something 

<强>演示:

>>> lis = range(5)
>>> for item, next_item in zip(lis, lis[1:]):
...     print item, next_item
...     
0 1
1 2
2 3
3 4

请注意zip返回一个列表,因此如果zip的输入数据很大,那么最好使用itertools.izip,因为它返回一个迭代器。而不是使用itertools.tee切片获取迭代器。

在演示中,您可以看到循环zipitem=3处停止,这是因为zip与最短的可迭代短路。如果您希望输出为4, some_default_value,则使用itertools.izip_longest,它允许您为较短的迭代中的缺失项提供默认值。

答案 1 :(得分:3)

如果您按照实际元素的数组的索引号进行迭代,则可以访问列表的任何成员:

for i in range(len(vocab_list)-1):
    for j in range(len(sentence)-1):
        if(vocab_list[i]==sentence[j] and vocab_list[i+1]==sentence[j+1]):
            print "match" 

答案 2 :(得分:1)

存储之前的字样:

prev2 = None
for word2 in vocab_list:
    prev = None
    for elem in sentence2:
        if prev == prev2 and elem == word2:
            # do something
        prev = elem
     prev2 = word2

向后看比向前看容易得多。

对于使用索引,您始终可以使用enumerate()函数向循环添加索引;你可以在这种情况下向前看:

表示j,word2表示枚举(vocab_list):     for i,elem in enumerate(sentence2):         如果i + 1&lt; len(sentence2)和j + 1&lt; LEN(vocab_list):             nextElem = sentence2 [i + 1]             nextWord2 = vocab_list [j + 1]

但跟踪前一个元素会更容易。