一尘不染

在Python中旋转二维数组

python

在一个程序中,我正在写一个旋转二维数组的需求。在寻找最佳解决方案时,我发现了这种令人印象深刻的一线功能:

rotated = zip(*original[::-1])

我现在在程序中使用它,它按预期工作。我的问题是,我不了解它是如何工作的。

如果有人可以解释所涉及的不同功能如何实现所需的结果,我将不胜感激。


阅读 173

收藏
2020-12-20

共1个答案

一尘不染

考虑以下二维列表:

original = [[1, 2],
            [3, 4]]

让我们将其逐步分解:

>>> original[::-1]   # elements of original are reversed
[[3, 4], [1, 2]]

此列表传递给zip()使用参数unpacking,因此zip调用最终等效于此:

zip([3, 4],
    [1, 2])
#    ^  ^----column 2
#    |-------column 1
# returns [(3, 1), (4, 2)], which is a original rotated clockwise

希望注释能够清楚说明其zip作用,它将基于索引将来自每个可迭代输入的元素进行分组,或者换句话说,将列进行分组。

2020-12-20