Python:获取array满足给定条件的元素的索引

本文展示了如何使用NumPy库中的np.argwhere和np.where函数来查找数组中特定元素的位置。通过实例说明了这两种方法的区别,np.argwhere返回的是一个二维数组,而np.where返回的是一个一维数组。

使用np.argwhere

import numpy as np
a = np.array([1,2,3,4,5,6,1,2,3])
b = np.argwhere(a == 1)
print(b)

输出:

[[0]
 [6]]

 

使用np.where

import numpy as np
a = np.array([1,2,3,4,5,6,1,2,3])
b = np.where(a == 1)
print(b)
print(b[0])
print(type(b[0]))

输出:

(array([0, 6], dtype=int64),)
[0 6]
<class 'numpy.ndarray'>
 

### 如何在Python获取数组元素索引 #### 使用内置方法 `index()` 对于列表类型的数组,可以使用`list.index()`函数来找到特定元素的第一个匹配项的位置。 ```python arr = ['apple', 'banana', 'cherry'] element = 'banana' position = arr.index(element) print(f"The position of {element} is {position}") ``` 如果尝试查找不存在于列表中的元素,则会抛出异常。因此,在实际应用时建议先判断元素是否存在[^2]。 #### 自定义线性搜索算法实现 除了利用内建的方法外,还可以编写自定义函数来进行更灵活的操作。下面是一个简单的例子展示如何通过遍历整个列表并返回目标值首次出现的位置: ```python def find_element_position(arr, target): """Return the first occurrence index of target in arr or -1 if not present.""" for idx, val in enumerate(arr): if val == target: return idx return -1 # 测试代码 test_array = [64, 34, 25, 12, 22, 11, 90] search_value = 22 result = find_element_position(test_array, search_value) if result != -1: print(f"{search_value} was found at index {result}.") else: print(f"{search_value} does not exist within this list.") ``` 此段程序实现了基本的顺序查找逻辑,并能够处理当给定的目标不在数据集中时的情况。 #### 利用哈希表提高效率 为了更快地定位到某个数值对应的下标位置,特别是面对大量重复查询需求的情况下,可以考虑构建一个映射关系(键为元素值,值为其所在索引),即创建字典结构作为辅助工具。这不仅简化了后续访问过程而且提高了性能表现。 ```python class ValueIndexMap(object): def __init__(self): self.val_to_index = {} # 存储value:index的关系 def add(self, value, index): self.val_to_index[value] = index def get_index_of(self, value): try: return self.val_to_index[value] except KeyError: raise ValueError('The specified key "{}" does not exist.'.format(value)) # 创建实例对象并填充测试数据 mapper = ValueIndexMap() for i, v in enumerate([64, 34, 25, 12, 22, 11, 90]): mapper.add(v, i) try: location = mapper.get_index_of(22) print(f'Element "22" located at index: {location}') except ValueError as e: print(e.message) ``` 上述类展示了基于哈希表的数据存储方式以及快速检索机制的设计思路[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeniuHe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值