【发布时间】:2010-11-18 10:46:54
【问题描述】:
问题很简单,我想迭代列表的每个元素和下一个成对的元素(用第一个包裹最后一个)。
我想到了两种非pythonic的方法:
def pairs(lst):
n = len(lst)
for i in range(n):
yield lst[i],lst[(i+1)%n]
和:
def pairs(lst):
return zip(lst,lst[1:]+[lst[:1]])
预期输出:
>>> for i in pairs(range(10)):
print i
(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
(5, 6)
(6, 7)
(7, 8)
(8, 9)
(9, 0)
>>>
有什么关于更pythonic的方法的建议吗?也许有一个我没有听说过的预定义函数?
还有一个更通用的 n-fold(使用三重奏、四重奏等,而不是对)版本可能会很有趣。
【问题讨论】:
-
你的第一个解决方案已经足够好了!
-
在第二个版本中,将
lst[0]更改为lst[:1]以使其适用于空序列。代码也变得更加对称。
标签: list iteration tuples python