如何创建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
相关产品推荐
相关产品推荐

