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

Python二维列表场景下如何随机隐藏网格中恰好一半的数值

实现思路
  • 先计算网格总元素数,确认需要隐藏的数量:总元素数为所有行的长度之和,隐藏数量取总数量的一半即可,若总元素数为奇数可根据需求调整取整规则。
  • 生成网格所有位置的坐标列表,把二维的行列索引组合成元组存为列表,比如4行4列的规则网格会生成包含16个坐标元组的列表。
  • 用random.sample方法从坐标列表里随机抽取对应隐藏数量的不重复坐标,该方法原生支持无重复采样,完全避免重复修改同一个位置的问题。
  • 遍历抽到的坐标,将对应位置的值修改为你定义的隐藏标记2即可。
原代码问题说明

你之前的实现是逐行随机选位置修改,很容易出现同一位置被多次重复赋值的情况,最终实际隐藏的数量会少于你预期的数值,自然没法精准控制隐藏占比。

优化后代码
import random

# 类方法版本,适配你原来的代码结构
def startingArray(self, grid_copy):
    # 生成所有坐标的列表,兼容规则/不规则2D列表
    all_positions = [(i, j) for i, row in enumerate(grid_copy) for j in range(len(row))]
    total_cells = len(all_positions)
    # 计算需要隐藏的数量,恰好一半
    hide_count = total_cells // 2
    # 随机采样不重复的坐标
    hide_positions = random.sample(all_positions, hide_count)
    # 批量修改坐标的值为隐藏标记2
    for i, j in hide_positions:
        grid_copy[i][j] = 2
效果验证

针对你给出的4×4示例网格,上述代码会随机选8个不同的位置设置为2,刚好隐藏一半的数值,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:27:05