鱼C论坛

 找回密码
 立即注册
查看: 1900|回复: 2

[已解决]看不懂res[min(idx := i%n,n - idx)] +=c

[复制链接]
发表于 2023-3-24 14:36:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 有奶就是娘 于 2023-3-24 14:40 编辑

在leetcode刷题,第六题
题目如下
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 N 字形排列。

比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

P   A   H   N
A P L S I I G
Y   I   R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。

看到了一种解法,有一句看不懂,第8行
class Solution:
    def convert(self, s: str, numRows: int) -> str:
        n = numRows + numRows - 2  #每组数据的个数
        res = ['']*numRows
        if numRows ==1 :
            return s
        for i, c in enumerate(s):
            res[min(idx := i%n,n - idx)] +=c
        return ''.join(res)
最佳答案
2023-3-24 14:53:22
第 8 行是使用了 Python 3.8 引入的赋值表达式(Assignment Expressions)特性,又称为 "海象运算符"(walrus operator),用于在表达式中进行赋值。

解释一下这个解法中的第 8 行代码:
res[min(idx := i % n, n - idx)] += c
i % n 是将当前字符的索引 i 对 n 取模,这里的 n 是 a,即每组数据的个数。通过这种计算方式,我们可以得到当前字符在一个 "N" 字形组中的相对位置。

使用赋值表达式 (idx := i % n),我们将计算得到的相对位置赋值给变量 idx。这样,我们可以在表达式中继续使用这个值。

min(idx, n - idx) 这部分代码是用来计算字符在 res 列表中的索引。这个索引值决定了字符在 "N" 字形排列中的行数。例如,在给定的例子中,"A" 在 "N" 字形排列的第 0 行,"P" 在第 1 行,"Y" 在第 2 行。

最后,res[min(idx, n - idx)] += c 会将当前字符 c 追加到对应行索引的字符串中。在循环结束后,res 列表包含了所有按行排列的字符串。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-24 14:53:22 | 显示全部楼层    本楼为最佳答案   
第 8 行是使用了 Python 3.8 引入的赋值表达式(Assignment Expressions)特性,又称为 "海象运算符"(walrus operator),用于在表达式中进行赋值。

解释一下这个解法中的第 8 行代码:
res[min(idx := i % n, n - idx)] += c
i % n 是将当前字符的索引 i 对 n 取模,这里的 n 是 a,即每组数据的个数。通过这种计算方式,我们可以得到当前字符在一个 "N" 字形组中的相对位置。

使用赋值表达式 (idx := i % n),我们将计算得到的相对位置赋值给变量 idx。这样,我们可以在表达式中继续使用这个值。

min(idx, n - idx) 这部分代码是用来计算字符在 res 列表中的索引。这个索引值决定了字符在 "N" 字形排列中的行数。例如,在给定的例子中,"A" 在 "N" 字形排列的第 0 行,"P" 在第 1 行,"Y" 在第 2 行。

最后,res[min(idx, n - idx)] += c 会将当前字符 c 追加到对应行索引的字符串中。在循环结束后,res 列表包含了所有按行排列的字符串。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-7 13:45:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 23:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表