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

如何创建Python程序在NumPy数组中搜索值并返回全部匹配结果

问题分析
  • 原生Python字典不支持重复键:你定义cupcake_dict时,后写入的'Red Velvet': 'Bonjour Bakery'会直接覆盖前一个同键条目,打印字典就能看到Red Velvet仅对应1个门店,这一步已经丢失了数据,后续不管转成什么结构都找不回第二条记录。
  • NumPy数组没有.index()方法:这个方法是Python原生列表的方法,在ndarray对象上调用会直接报错。
  • 匹配逻辑错误:cupcake_array是二维数组,每个元素是长度为2的子数组(分别存储蛋糕类型、门店名称),直接用cake_name in cupcake_array无法正确匹配第一列的键,且原逻辑仅设计了返回单个结果的分支,无法输出多匹配项。
修正方案

首先要修正数据源逻辑:不要用原生字典存储存在重复键的键值对,直接用二维列表存储所有原始条目后再转NumPy数组,再通过布尔索引一次性筛选所有匹配结果。
完整可运行代码如下:

import numpy as np

# 直接构造全量条目列表,避免字典覆盖重复键导致数据丢失
cupcake_raw = [
    ["Red Velvet", "Princess Cupcakes"],
    ["Vanilla", "Vanilla Patisserie"],
    ["Chocolate", "Beary Good Cupcakes"],
    ["Red Velvet", "Bonjour Bakery"]
]
cupcake_array = np.array(cupcake_raw)

cake_name = input("Enter Cupcake Type: ").strip()
# 布尔索引筛选:取所有第一列等于输入蛋糕名的行,提取第二列的门店值
match_shops = cupcake_array[cupcake_array[:, 0] == cake_name, 1]

if match_shops.size > 0:
    print(f"Cupcake Type: {cake_name}")
    print("Cupcake Locations:")
    for shop in match_shops:
        print(f"- {shop}")
else:
    print("Cupcake not available at any locations")

运行后输入Red Velvet,会正确输出两个对应门店:

Enter Cupcake Type: Red Velvet
Cupcake Type: Red Velvet
Cupcake Locations:
- Princess Cupcakes
- Bonjour Bakery
逻辑说明
  • cupcake_array[:, 0]表示取二维数组所有行的第0列(也就是所有蛋糕类型字段),和输入值做相等判断后会返回一个布尔型掩码数组,标记哪些行是匹配项。
  • 用掩码作为索引可以直接筛出所有匹配行,指定取第1列(门店字段)就能一次性拿到所有匹配的门店值,不需要手动遍历找索引。
  • 通过判断匹配结果数组的size属性,区分有匹配结果和无结果的场景,有多个结果时循环输出即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:36:18