OneLiner 解释 - Python [重复]

Posted

技术标签:

【中文标题】OneLiner 解释 - Python [重复]【英文标题】:OneLiner explanation - Python [duplicate] 【发布时间】:2021-11-28 08:24:28 【问题描述】:

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

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

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

例如,水平翻转 [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 循环 之前的那些部分有问题,因为我在互联网上找不到可以在循环之前放置代码的解释。

【问题讨论】:

【参考方案1】:
class Solution:

定义类解决方案

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

定义flipAndInvertImage 函数,其中一个参数是整数列表列表,以及相同类型的输出。

好的,现在是oneliner:

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 循环遍历图像数组中的行。

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

【讨论】:

以上是关于OneLiner 解释 - Python [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Ruby oneliner 的正则表达式块中的单引号问题[重复]

python Python Oneliner

Python oneliner if 条件与多个语句用逗号和分号分隔

python 这个“oneliner”找到可以从作为参数给出的单词中的字符创建的所有单词。要在此列出的列表

尝试/赶上 oneliner 可用吗?

text OneLiner变量和terraform适用