-1

我在 LeetCode 中有一个名为832 的任务。翻转图像

给定一个 nxn 二进制矩阵图像,水平翻转图像,然后将其反转,并返回结果图像。

水平翻转图像意味着图像的每一行都被反转。

例如,水平翻转 [1,1,0] 会得到 [0,1,1]。反转图像意味着将每个 0 替换为 1,将每个 1 替换为 0。

例如,反转 [0,1,1] 会得到 [1,0,0]。

示例 1:

输入:图像 = [[1,1,0],[1,0,1],[0,0,0]]

输出:[[1,0,0],[0,1,0],[1,1,1]]

解释:

首先反转每一行:[[0,1,1],[1,0,1],[0,0,0]]。
然后,反转图像:[[1,0,0],[0,1,0],[1,1,1]]

并且某人提供的解决方案是Python中的单线:

class Solution:
def flipAndInvertImage(self, image: List[List[int]]) -> List[List[int]]:
    return [[1 ^ i for i in reversed(row)] for row in image]

并且调试单行代码根本无效,所以我的请求是逐个解释代码。大多数情况下,我在for 循环之前遇到了这些部分的问题,因为我在互联网上找不到可以在循环之前放置代码的解释。

4

1 回答 1

0
class Solution:

定义类解决方案

def flipAndInvertImage(self, image: List[List[int]]) -> List[List[int]]:

flipAndInvertImage使用整数列表的一个参数和相同类型的输出定义函数。

好的,现在单线:

return [[1 ^ i for i in reversed(row)] for row in image]

这称为生成器表达式,其中

a = [int(i) for i in list_of_strings]

例如,您循环list_of_strings然后将函数int()应用于它。这与这样做大致相似:

a = []
for i in list_of_strings:
    a.append(int(i))

所以[[...] for row in image]是第一个生成器表达式,并使变量row在 Image 数组中的行上循环。

[1 ^ i for i in reversed(row)]是第二个/内部生成器。它遍历外部生成器给出的变量行,使用reverse()函数反转它,然后对其应用二进制 x-or 操作。所做1 ^ i的就是将 1 变为 0,将 0 变为 1。

于 2021-11-28T08:50:53.287 回答