Python 如何在当前索引/迭代中访问for循环中的下一个元素?
我几乎没有学习python,也没有尝试编写一些代码,但是在尝试访问列表中的下一个元素时遇到了一些问题 以下是我的部分代码:Python 如何在当前索引/迭代中访问for循环中的下一个元素?,python,Python,我几乎没有学习python,也没有尝试编写一些代码,但是在尝试访问列表中的下一个元素时遇到了一些问题 以下是我的部分代码: for word2 in vocab_list: index2 = 0 for elem in sentence2: if (elem == word2 and nextElem == nextWord2) do something index2 += 1 问题在于nexteme和nextWord2,
for word2 in vocab_list:
index2 = 0
for elem in sentence2:
if (elem == word2 and nextElem == nextWord2)
do something
index2 += 1
问题在于nexteme
和nextWord2
,如果我在当前迭代中,如何访问它们?存储前面的单词:
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,枚举中的单词2(词汇列表):
对于i,枚举中的元素(第2句):
如果i+1索引器
:
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
的输入数据很大,那么最好使用它,因为它返回一个迭代器。而不是使用切片获取迭代器
在演示中,您可以看到循环中的
zip
在item=3
处停止,这是因为zip
对最短的iterable短路。如果您希望输出为4,一些默认值
,则使用,它允许您为较短的iterables中缺少的项提供默认值。如果您按数组的索引号而不是实际元素进行迭代,则可以访问列表的任何成员:
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"
但在这种情况下,你不需要确保长度均匀吗?我认为有一个itertools函数可能允许odds@WayneWerner你的意思是
iterools.izip_longest
?这很好,但问题是我需要访问我的vocab_列表中的一个元素,我的vocab_列表中的每一行实际上都分为3个索引,所以如果我使用“for I in range(len(vocab_列表)-1)”,我怎样才能以这样的方式更改它,以便访问I的每个索引?…因为您的代码使用I作为整数索引遍历列表,这将整行存储在列表中没有问题-这意味着您正在迭代多维数组。此语法将读取vocab_列表中每行的各个元素:vocab_列表[i][0]、vocab_列表[i][1]或vocab_列表[i][2]。问题是,我需要访问第2句“first”中的第一个元素,以及第2句“second”中的第二个元素,这些是一个列表中的相邻单词,我想检查我的词汇列表中的第一个元素是否在第二个元素之前。你想要两个嵌套的迭代,一个在词汇列表
上,一个在句子
上,并且能够在两者中窥视以下项目?