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

网格区域选取:如何将随机序号映射到Python二维列表对应位置

实现随机序号到二维列表的映射逻辑

要解决把1-based随机序号映射到二维列表的问题,核心是将线性序号转换为二维索引,具体实现步骤如下:

映射规则推导

序号从1开始,对应二维列表的0-based索引:

  • 对任意序号num,先转成0-based的线性位置:linear_pos = num - 1
  • 行索引:row = linear_pos // size(通过整除size确定所在行)
  • 列索引:col = linear_pos % size(通过取模size确定所在列)

举个size=4的例子:

  • num=1 → linear_pos=0 → row=0//4=0,col=0%4=0 → 对应vertical[0][0]
  • num=5 → linear_pos=4 → row=4//4=1,col=4%4=0 → 对应vertical[1][0]
  • num=12 → linear_pos=11 → row=11//4=2,col=11%4=3 → 对应vertical[2][3]

修改后的完整代码

将映射逻辑整合到原代码中,替换全0初始化后的部分:

import random

size = int(input("Size? (even) "))
area = size ** 2
half = area // 2
# 生成half个不重复的1~area的随机数
thechosenhalf = random.sample(range(1, area + 1), half)

def printgrid():
    for b in range(size):
        print(f"{b}[{' '.join(str(i) for i in vertical[b])}]")
    print("  ", end="")
    for b in range(size):
        print(f"{b} ", end="")

# 初始化全0二维列表(用列表推导式更简洁)
vertical = [[0 for _ in range(size)] for _ in range(size)]

# 核心映射逻辑:遍历选中的序号,把对应位置设为1
for num in thechosenhalf:
    linear_pos = num - 1
    row = linear_pos // size
    col = linear_pos % size
    vertical[row][col] = 1

printgrid()

验证示例

  1. 当thechosenhalf为1~8时:
    前两行的所有位置都会被设为1,输出符合预期:
    0[1 1 1 1]
    1[1 1 1 1]
    2[0 0 0 0]
    3[0 0 0 0]
      0 1 2 3 
    
  2. 当thechosenhalf = [12,5,16,2,8,9,15,3]时:
    逐个计算每个序号对应的位置并设为1,最终输出和预期完全匹配。

内容的提问来源于stack exchange,提问作者RoyalPhrog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:47:33