在一个程序中,我正在写一个旋转二维数组的需求。在寻找最佳解决方案时,我发现了这种令人印象深刻的一线功能:
rotated = zip(*original[::-1])
我现在在程序中使用它,它按预期工作。我的问题是,我不了解它是如何工作的。
如果有人可以解释所涉及的不同功能如何实现所需的结果,我将不胜感激。
考虑以下二维列表:
original = [[1, 2], [3, 4]]
让我们将其逐步分解:
>>> original[::-1] # elements of original are reversed [[3, 4], [1, 2]]
此列表传递给zip()使用参数unpacking,因此zip调用最终等效于此:
zip()
zip
zip([3, 4], [1, 2]) # ^ ^----column 2 # |-------column 1 # returns [(3, 1), (4, 2)], which is a original rotated clockwise
希望注释能够清楚说明其zip作用,它将基于索引将来自每个可迭代输入的元素进行分组,或者换句话说,将列进行分组。