You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用排列字符串遍历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种,拼接后就是我们需要的列索引序列。

第二步:按规则遍历矩阵并分组求和

我们可以用循环来实现这个逻辑:

  1. 用一个循环器来重复生成行索引,一直循环0,1,2,3
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:33:12