def pairs(it):
it = iter(it)
prev = next(it)
for v in it:
yield prev, v
prev = v
a = [1,2,3,4,5]
for prev, cur in pairs(a):
print cur - prev
import itertools as it
for prev, cur in pairs(it.cycle([1,2,3,4])):
print cur - prev
这对大型容器有效,更重要的是,它对迭代器有效:
for prev, cur in pairs(open("/usr/share/dict/words").xreadlines()):
print cur, prev,
需要注意的是,这些解决方案中的任何一个都不适用于发电机。为此,请参阅Glenn Maynards高级解决方案。
对小列表使用zip:
这将生成列表的副本(以及列表两个副本中元组的列表),因此使用itertools处理较大的列表是很好的
这将避免同时复制列表和生成元组列表。
另一种不用复印的方法是
还有一种方法是:
这将创建一个迭代器,该迭代器对
entries
进行索引并将其推进一步。然后它使用enumerate
来获取项目的索引。索引从0开始,因此指向上一个元素,因为我们循环一个项目。另外,正如泰勒在评论中所指出的,如果您只想遍历这些差异,那么对于这样一个简单的问题,循环可能会过多。
我不知道你到底在看什么,但也许这能帮上忙:
zip
适用于列表,但对于一般情况:这对大型容器有效,更重要的是,它对迭代器有效:
编辑:我修改了生成器,省略了第一个没有前一个值的值,因为这更符合最初的问题(“查找相邻对之间的差异”),并添加了一个示例,说明它适用于无限重复的迭代器。
相关问题 更多 >
编程相关推荐