You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解包生成器?LeetCode Z字形变换代码输出异常问题

解决Z字形变换生成器输出问题

首先,咱们来定位你碰到的问题:你当前的print语句直接输出了生成器对象,这是因为("".join(line) for line in zigzag(word, num_rows))是一个生成器表达式——它是一个可迭代对象,但直接打印时只会显示其内存标识,不会自动迭代并拼接出最终字符串。

为什么*操作符没生效?

你尝试用*解包生成器,但print(*generator)会把生成器的每个元素作为独立参数传给print,参数之间会默认用空格分隔,这显然不是你想要的无间隔拼接字符串效果。

正确的解包与输出方式

要得到最终的拼接字符串,你需要把生成器的结果直接传给外层的"".join(),让它把所有子字符串拼接成一个完整的结果:

if __name__ == "__main__":
    word = "PAYPALISHIRING"
    num_rows = 4
    # 先遍历二维数组,把每行转成字符串,再拼接所有行
    result = "".join("".join(line) for line in zigzag(word, num_rows))
    print(result)

或者更简洁的嵌套写法:

print("".join("".join(line) for line in zigzag(word, num_rows)))

额外的函数优化建议

你的zigzag函数可以做一点小优化,初始化二维列表时用列表推导式更简洁高效,同时方向调整的逻辑也能简化:

def zigzag(word, num_rows):
    # 用列表推导式替代循环append
    array = [[] for _ in range(num_rows)]
    increasing = 1
    array_index = 0
    word_index = 0
    while word_index < len(word):
        array[array_index].append(word[word_index])
        array_index += increasing
        word_index += 1
        # 简化方向切换逻辑
        if array_index == -1:
            increasing = 1
            array_index = 1
        elif array_index == num_rows:
            increasing = -1
            array_index = num_rows - 2
    return array

这样调整后,函数逻辑更清晰,同时也能正确生成每行的字符列表,配合上面的print语句就能输出正确的Z字形变换结果了。

内容的提问来源于stack exchange,提问作者MrJoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:27:35