
本文详解为何对一维翻转结果调用原二维打印函数会导致逐字母输出,并提供结构清晰、可复用的翻转与打印方案。
本文详解为何对一维翻转结果调用原二维打印函数会导致逐字母输出,并提供结构清晰、可复用的翻转与打印方案。
问题根源在于数据结构层级错配:原始 cities 是二维列表(列表的列表),而 flipOrder 函数中通过 temp.insert(0, listy[r][c]) 生成的是扁平化的一维列表(如 ["Sacramento", "Portland", ..., "Miami"])。当这个一维列表传入 printList() 时,外层循环 for r in nightwatch: 中的 r 不再是子列表,而是字符串(例如 "Sacramento");内层循环 for c in r: 遂遍历该字符串的每个字符 'S', 'a', 'c'...,导致输出中出现字母间空格。
要实现“先反转每个子列表内部顺序,再反转子列表整体顺序”(即完全倒序),应保持二维结构。推荐使用简洁、安全的列表推导式:
def flipOrder(listy):
# 先反转子列表顺序(listy[::-1]),再对每个子列表反转元素顺序(x[::-1])
flipped = [x[::-1] for x in listy[::-1]]
printList(flipped)
此写法语义清晰、无副作用(不修改原列表),且避免手动索引和 insert(0, ...) 的 O(n²) 时间开销。
⚠️ 注意事项:
-
listy = temp仅修改函数局部变量listy,不会改变外部传入的cities(Python 中列表参数传递为对象引用,但重新赋值不改变原绑定); - 若需就地修改,应使用
listy[:] = temp或listy.clear(); listy.extend(temp); -
printList()当前设计仅适用于二维结构;若需兼容一维/二维输入,应增加类型判断或重构为多态接口。
最终输出符合预期:第一行按原二维顺序打印,第二行以完整倒序(子列表逆序 + 各子列表内元素逆序)呈现所有城市名称,单词完整、空格合理。










