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])