如何在每次迭代时输出一对反转列表。例如,如果my_list=[11,22,33,44,55]
,我想在第一次迭代时输出(55,44),在第二次迭代时输出(44,33),依此类推。我想不出除了以下方式之外的任何事情,但它无法正常工作:(
my_list = [11,22,33,44,55]
for i in reversed(my_list):
print (i, i+1)
欣赏任何提示。
答案 0 :(得分:3)
itertools recipes在这里可以提供帮助:
from itertools import tee, izip
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return izip(a, b)
请注意,在python3.x上,您不需要izip
- 您只需使用zip
现在你的循环就是:
for pair in pairwise(reversed(my_list)):
print(pair)
当然,我们也不需要 :
:a = reversed(my_list)
b = reversed(my_list)
next(b, None)
for pair in zip(a, b):
print(pair)
这可以让你避免担心python2.x / python3.x兼容性问题(因为它可以在python2.6 +上运行),但是你不会得到很好的可重用(并且更容易阅读)成对功能。
答案 1 :(得分:2)
假设:
>>> my_list=[11,22,33,44,55]
你可以这样做:
>>> zip(my_list[1:], my_list)[::-1]
[(55, 44), (44, 33), (33, 22), (22, 11)]
或者,
>>> reversed(zip(my_list[1:], my_list))
如果你愿意的话。
或者,从评论(如果你想要Python 3和2兼容性):
>>> zip(my_list[::-1], my_list[-2::-1])
答案 2 :(得分:0)
在你的循环中,我是列表中的一个元素而不是索引,因此递增它不是一个好主意。
您可以使用mgilson提供的漂亮的pythonic方式,或者您可以使用简单的C风格循环来实现此目的:
>>> my_list = [11,22,33,44,55]
>>> for i in xrange(len(my_list) - 1):
... print my_list[len(my_list) - 1 - i], my_list[len(my_list) - 1 - i - 1]
...
55 44
44 33
33 22
22 11