给出2个不同长度的序列:
In [931]: a = [1,2,3]
In [932]: b = [4,5,6,7]
Run Code Online (Sandbox Code Playgroud)
这就是我要的
In [933]: c = zip(reversed(a),reversed(b))
In [934]: [x for x in reversed(c)]
Out[934]: [(1, 5), (2, 6), (3, 7)]
Run Code Online (Sandbox Code Playgroud)
但是我不喜欢在所有输入参数上使用reverse的想法,我也不想重新实现我自己的zip函数.
所以:
我会建议:
>>> a = [1,2,3]
>>> b = [4,5,6,7]
>>> k = min(len(a),len(b))
>>> zip(a[-k:], b[-k:])
[(1, 5), (2, 6), (3, 7)]
Run Code Online (Sandbox Code Playgroud)
以下内容比其他发布的解决方案更快更清晰:
s = zip(reversed(a), reversed(b))
s.reverse() # in-place
Run Code Online (Sandbox Code Playgroud)
在逆转内置创建以相同的速度向前迭代的迭代器这些循环倒退.不会产生额外的内存(输入的完整副本),并且Python eval-loop周围没有慢速跳转(存在于使用指示的其他解决方案中).