如何用Python的for循环实现符合特定规则的方格网格函数?
Python 实现 grid 函数
需求说明
输入一个列表,输出列表的列表形式的方格网格,每个子列表代表一行,需满足:
- 每行、每列的每个值仅出现一次
- 每一行由上一行将最后一个元素移至开头得到
实现代码
def grid(lst): grid_rows = [] current = lst.copy() # 生成与输入列表长度一致的行数 for _ in range(len(lst)): grid_rows.append(current.copy()) # 把最后一个元素移到开头,生成下一行 last_item = current.pop() current.insert(0, last_item) return grid_rows
代码解释
- 初始化空列表
grid_rows用来存储最终的网格行数据 - 复制输入列表作为初始行
current,防止后续操作修改原输入列表 - 通过for循环生成对应行数:
- 将当前行的副本加入结果列表(如果直接添加
current,后续修改会影响已存入的行) - 弹出当前行的最后一个元素,插入到列表开头,得到下一行的内容
- 将当前行的副本加入结果列表(如果直接添加
- 循环完成后返回结果列表
测试示例
print(grid([1, 2, 3, 4])) # 输出:[[1, 2, 3, 4], [4, 1, 2, 3], [3, 4, 1, 2], [2, 3, 4, 1]]
该实现自然满足规则:
- 每行是原列表的循环移位,因此每行元素无重复
- 每列对应原列表不同索引的循环取值,因此每列元素也不会重复
内容的提问来源于stack exchange,提问作者dl br
相关产品推荐
相关产品推荐

