如何利用排列字符串遍历4x4二维数组并按指定规则求和?
矩阵遍历求和问题:按固定行循环+全排列列索引分组求和
我来帮你梳理清楚这个需求并给出可落地的实现方案~首先先明确几个关键细节:
- 你提到的行索引“1234循环”,对应编程里数组常用的0-based索引就是
0→1→2→3→0→1→2→3...(如果非要用1-based的行号也没问题,后面代码会说明怎么调整) - 你说的列索引来源是
1234的排列字符串,实际应该是0123的全排列拼接(毕竟矩阵是4列,索引从0开始更合理),这里我们统一按0-based来处理 - 核心逻辑:按行循环顺序取行,按全排列字符串的顺序取列,每连续4个元素计算一次和
第一步:生成列索引用的全排列字符串
首先我们需要生成[0,1,2,3]的所有全排列,然后把每个排列的数字拼接成一个长字符串。4个元素的全排列一共有4! =24种,拼接后就是我们需要的列索引序列。
第二步:按规则遍历矩阵并分组求和
我们可以用循环来实现这个逻辑:
- 用一个循环器来重复生成行索引,一直循环
0,1,2,3 - 遍历全排列字符串的每个字符,转成列索引
- 每收集到4个元素,就计算它们的和,然后重置临时收集列表
具体代码实现(Python)
import itertools # 定义你的4x4矩阵(0-based索引,对应你给出的数组) matrix = [ [9, 2, 7, 8], [6, 4, 3, 7], [5, 8, 1, 8], [7, 6, 9, 4] ] # 生成0-3的所有全排列,拼接成列索引字符串 all_permutations = itertools.permutations([0, 1, 2, 3]) col_index_str = ''.join(''.join(map(str, perm)) for perm in all_permutations) # 初始化行索引循环器(对应1234循环的0-based版本) row_cycle = itertools.cycle([0, 1, 2, 3]) temp_elements = [] sum_results = [] # 遍历列索引字符串,按规则收集元素并分组求和 for col_char in col_index_str: col_idx = int(col_char) row_idx = next(row_cycle) # 从矩阵中取出对应元素 temp_elements.append(matrix[row_idx][col_idx]) # 每凑够4个元素就求和 if len(temp_elements) == 4: current_sum = sum(temp_elements) sum_results.append(current_sum) temp_elements = [] # 输出结果 print("每4个元素的求和结果:") print(sum_results)
结果说明
运行这段代码后,会得到一个包含6个结果的列表(因为24个列索引,每4个一组,24÷4=6)。比如第一组的4个元素是:
- 行0(对应你说的行1)、列0 → 9
- 行1(对应你说的行2)、列1 →4
- 行2(对应你说的行3)、列2 →1
- 行3(对应你说的行4)、列3 →4
它们的和是9+4+1+4=18,这就是第一个求和结果。
如果你坚持要用1-based的行索引(直接用1、2、3、4),只需要把row_cycle改成itertools.cycle([1,2,3,4]),然后取元素时改成matrix[row_idx-1][col_idx]就可以了,逻辑完全一致。
内容的提问来源于stack exchange,提问作者gqli
相关产品推荐
相关产品推荐

