Python实现N份RGB坐标网格字符串的拼接方案求助
解决方案:任意N份拆分的RGB网格字符串拼接
针对你需要将N份拆分的RGB网格字符串(比如例子中的10x10网格拆成2份)按行拼接还原的需求,这里有一个通用的实现思路和代码示例,能轻松适配任意数量的拆分份数:
核心思路
每个输入字符串中的每一个{ ... }块,对应原网格同一行的一段颜色数据。比如你的例子里,第一个字符串的第1个块是第1行的前5个颜色,第二个字符串的第1个块是第1行的后5个颜色,我们只需要把所有输入字符串中相同位置的块里的颜色列表合并,再重新封装成完整的行块即可。
代码实现(Python)
这个示例支持任意N个输入字符串,且假设每个行块内的颜色数量一致(比如你的例子里每行拆成2段,每段5个,总10个),同时也能适配不同行列数的网格(只要每个拆分的字符串的行块数量相同):
import re def merge_rgb_grids(*grid_strings): # 步骤1:解析每个输入字符串,提取每行的颜色列表 parsed_grids = [] for s in grid_strings: # 用正则匹配所有 { ... } 块 blocks = re.findall(r'\{([^}]+)\}', s) # 每个块处理成颜色列表(去掉多余空格) row_colors = [block.strip().split() for block in blocks] parsed_grids.append(row_colors) # 步骤2:按行索引对齐,合并颜色列表 merged_rows = [] # 假设所有输入的行数量一致(即原网格的行数) num_rows = len(parsed_grids[0]) for row_idx in range(num_rows): # 收集所有输入中当前行的颜色列表,合并 combined_colors = [] for grid in parsed_grids: combined_colors.extend(grid[row_idx]) # 重新封装成 { ... } 格式 merged_row = f"{{ {' '.join(combined_colors)} }}" merged_rows.append(merged_row) # 步骤3:组合成最终的字符串 return ' '.join(merged_rows) # 测试你的示例输入 grid1 = "{ #010101 #010101 #010101 #010101 #010101 } { #010101 #010101 #010101 #010101 #010101 } { #020202 #020202 #030303 #020202 #010101 } { #020202 #030303 #050505 #030303 #010101 } { #020202 #030303 #0f0f0f #040404 #020202 } { #030303 #0c0c0c #0f0f0f #0f0f0f #030303 } { #040404 #0b0b0b #ffffff #ffffff #040404 } { #0a0a0a #ffffff #ffffff #ffffff #050505 } { #ffffff #ffffff #ffffff #ffffff #040404 } { #ffffff #ffffff #ffffff #ffffff #040404 }" grid2 = "{ #040404 #020202 #010101 #010101 #010101 } { #040404 #020202 #010101 #010101 #000000 } { #050505 #020202 #010101 #010101 #000000 } { #040404 #020202 #010101 #010101 #000000 } { #030303 #010101 #010101 #010101 #000000 } { #020202 #010101 #010101 #010101 #000000 } { #010101 #010101 #010101 #010101 #000000 } { #010101 #010101 #010101 #000000 #000000 } { #010101 #010101 #010101 #000000 #000000 } { #010101 #010101 #010101 #000000 #000000 }" # 合并两个网格,也可以传入更多(比如3个、4个...) result = merge_rgb_grids(grid1, grid2) print(result)
代码说明
- 解析阶段:用正则表达式
r'\{([^}]+)\}'匹配所有{ ... }块,然后把每个块里的颜色按空格分割成列表,这样每个输入字符串就被转换成了一个二维列表(行→颜色)。 - 合并阶段:遍历每一行索引,把所有输入字符串中对应行的颜色列表合并成一个完整的行颜色列表,再重新包装成
{ 颜色1 颜色2 ... }的格式。 - 灵活性:这个函数用
*grid_strings参数接受任意数量的输入字符串,只要所有输入的行块数量相同(即对应原网格的行数),就能正确合并。如果你的网格不是10x10,只要拆分规则一致,也能直接使用。
输出示例
运行上面的代码,会输出10个完整的行块,每个行块包含10个颜色,比如第一行就是:{ #010101 #010101 #010101 #010101 #010101 #040404 #020202 #010101 #010101 #010101 }
和你预期的完全一致。
内容的提问来源于stack exchange,提问作者xvy.
相关产品推荐
相关产品推荐

