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

如何按特定规则替换numpy数组元素:教室座位自动分配

解决方案

要实现从最后一排开始、从右到左替换可用座位的规则,可以按以下步骤操作:

核心思路

  1. 生成所有座位的坐标,并按照**行号降序(最后一排优先)、列号降序(每行从右到左)**的规则排序
  2. 筛选出其中标记为"Available"的座位坐标
  3. 根据可用座位情况执行替换或提示无座

代码实现

单姓名替换示例

import numpy as np

def assign_seat(classroom, name):
    # 获取教室的行数和列数
    rows, cols = classroom.shape
    # 生成所有座位坐标,按行从后到前、每行从右到左排序
    sorted_coords = []
    for row in reversed(range(rows)):
        for col in reversed(range(cols)):
            sorted_coords.append((row, col))
    
    # 遍历排序后的坐标,找到第一个可用座位
    for coord in sorted_coords:
        if classroom[coord] == "Available":
            classroom[coord] = name
            print(f"已为{name}分配座位:{coord}")
            return classroom
    
    # 无可用座位时的提示
    print("无可用座位")
    return classroom

# 测试示例
classroom1 = np.array([["Martha", "Available"], 
                       ["Max", "Anahi"], 
                       ["Available", "Available"], 
                       ["Alexis", "Rigel"]])

# 为Alex分配座位
classroom1 = assign_seat(classroom1, "Alex")
print("\n更新后的教室:")
print(classroom1)

# 再为Zoe分配座位
classroom1 = assign_seat(classroom1, "Zoe")
print("\n再次更新后的教室:")
print(classroom1)

批量替换多个姓名示例

如果需要一次性给多人分配座位,可以扩展函数:

def assign_seats(classroom, names):
    rows, cols = classroom.shape
    # 生成符合规则的排序坐标
    sorted_coords = []
    for row in reversed(range(rows)):
        for col in reversed(range(cols)):
            sorted_coords.append((row, col))
    
    # 筛选所有可用座位
    available_coords = [coord for coord in sorted_coords if classroom[coord] == "Available"]
    
    if not available_coords:
        print("无可用座位")
        return classroom
    
    # 按顺序分配,最多分配可用座位数量的姓名
    assign_count = min(len(names), len(available_coords))
    for i in range(assign_count):
        classroom[available_coords[i]] = names[i]
        print(f"已为{names[i]}分配座位:{available_coords[i]}")
    
    if assign_count < len(names):
        print(f"剩余{len(names)-assign_count}人无法分配座位,教室已满")
    
    return classroom

# 测试批量分配
classroom2 = np.array([["Martha", "Available"], 
                       ["Max", "Anahi"], 
                       ["Available", "Available"], 
                       ["Alexis", "Rigel"]])

classroom2 = assign_seats(classroom2, ["Alex", "Zoe", "Luna"])
print("\n批量分配后的教室:")
print(classroom2)

代码说明

  • reversed(range(rows)):生成从最后一行到第一行的行号序列(比如4行教室的行号为3,2,1,0)
  • reversed(range(cols)):生成每行从右到左的列号序列(比如2列每行的列号为1,0)
  • 先排序再筛选可用座位,确保替换顺序严格符合题目要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:20:39