Python 如何在每次迭代时输出一对反向列表

Python 如何在每次迭代时输出一对反向列表,python,Python,如何在每次迭代时输出一对反向列表。例如,如果my_list=[11,22,33,44,55],我希望在第一次迭代时输出(55,44),在第二次迭代时输出(44,33),依此类推。除了以下方法,我想不出任何其他方法,但它不起作用:( 感谢您的任何提示。以下内容可能会有所帮助: from itertools import tee, izip def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), ..." a, b =

如何在每次迭代时输出一对反向列表。例如,如果
my_list=[11,22,33,44,55]
,我希望在第一次迭代时输出(55,44),在第二次迭代时输出(44,33),依此类推。除了以下方法,我想不出任何其他方法,但它不起作用:(

感谢您的任何提示。

以下内容可能会有所帮助:

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)

当然,我们这里也不需要itertools:

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+上工作),但是您没有很好的可重用(并且更易于阅读)成对函数。

在您的循环中,i是列表的一个元素,而不是索引,所以增加它不是一个好主意

您可以使用mgilson提供的良好的Python方式,也可以使用简单的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
鉴于:

你可以做:

>>> zip(my_list[1:], my_list)[::-1]
[(55, 44), (44, 33), (33, 22), (22, 11)]
或者

如果你愿意的话

或者,从注释中(如果您想要Python 3和2的兼容性):


在Python3中,
zip
返回一个迭代器,您不能将其切片或传递给
reversed
。您可以执行
zip(my_list[:-1],mylist[-2::-1])
。@Blckknght:很好的调用。希望很快Python3将成为假定的默认值,Python2将成为调用异常。。。
>>> 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))
>>> zip(my_list[::-1], my_list[-2::-1])