有奶就是娘 发表于 2023-3-24 14:36:29

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

本帖最后由 有奶就是娘 于 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 +=c
      return ''.join(res)

isdkz 发表于 2023-3-24 14:53:22

第 8 行是使用了 Python 3.8 引入的赋值表达式(Assignment Expressions)特性,又称为 "海象运算符"(walrus operator),用于在表达式中进行赋值。

解释一下这个解法中的第 8 行代码:

res += 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 += c 会将当前字符 c 追加到对应行索引的字符串中。在循环结束后,res 列表包含了所有按行排列的字符串。

match123_xbd 发表于 2023-4-7 13:45:55

{:5_107:}
页: [1]
查看完整版本: 看不懂res[min(idx := i%n,n - idx)] +=c