如何编写基于宽、高、深度修改指定三维位置字符的字符串函数?
三维字符串位置替换函数实现
需求说明
需要编写一个函数,输入参数包括:
- 原字符串
- 整数类型的行索引、列索引、深度索引
- 替换字符
n - 整数宽度、高度、深度
函数返回原字符串的副本,将指定行、列、深度索引位置的字符替换为n。示例如下:
>>> replace_3d_char('.XXvv..vV..XXX.vVxv', 0, 0, 0, '#', 3, 3, 2) '#XXvv..vV..XXX.vVxv'
二维版本参考(背景信息)
此前已实现过二维版本的同类函数,参数包括原字符串、行索引、列索引、替换字符n、宽度、高度,返回替换指定行列位置后的字符串副本。示例:
>>> new_function('..x..x..x', 1, 1, '#', 3, 3) '..x.#x..x'
实现思路
- 索引计算逻辑:
- 二维场景中,单个二维层的长度为
width * height,指定位置的全局索引为:row * width + col - 三维场景中,每个深度切片对应一个完整的二维层,因此指定位置的全局索引需先跳过前面的深度层,再计算二维内的索引:
全局索引 = 深度索引 * (宽度 * 高度) + 行索引 * 宽度 + 列索引
- 二维场景中,单个二维层的长度为
- 字符串不可变处理:
由于Python字符串是不可变类型,需先将其转换为列表,修改指定索引的字符后再转回字符串。 - 可选的边界校验:
可以添加索引合法性检查,避免因输入无效索引导致的越界错误。
代码实现
def replace_3d_char(s, row, col, depth_idx, n, width, height, depth): # 计算单个二维层的字符总数 layer_size = width * height # 计算目标字符的全局索引 target_index = depth_idx * layer_size + row * width + col # 可选:校验索引是否在字符串范围内 if not (0 <= target_index < len(s)): raise IndexError("指定的行/列/深度索引超出字符串有效范围") # 转换为列表修改后拼接回字符串 s_list = list(s) s_list[target_index] = n return ''.join(s_list)
测试验证
运行题目中的示例:
result = replace_3d_char('.XXvv..vV..XXX.vVxv', 0, 0, 0, '#', 3, 3, 2) print(result) # 输出: #XXvv..vV..XXX.vVxv
内容的提问来源于stack exchange,提问作者hihowareyou
相关产品推荐
相关产品推荐

