在每个numpy数组元素上调用函数并在Python中覆盖它的值

时间:2016-12-08 15:33:37

标签: python arrays numpy

我有一个清单:

letters = ('1', '2', '3', '5', '8', '13', '21')

编号为8,我可以将其作为索引的索引: letters.index('8')

不,我有一个只包含字母数字的数组。

numbers = [3, 8, 13, 21, 5]

如何在每个元素上调用index(或类似)函数?

我想得到的是[2, 4, 5, 6, 3]

是否有索引等功能可以在单个元素上获取数组? 如果需要,可以将字母更改为数组

3 个答案:

答案 0 :(得分:1)

你可以尝试

letters = ('1', '2', '3', '5', '8', '13', '21')
numbers = [3, 8, 13, 21, 5]

result = [letters.index(str(n)) for n in numbers]

但只有当letters

中存在所有请求时,此功能才有效

您可以尝试此操作来测试letters

中的请求
[letters.index(str(n)) if str(n) in letters else -1 for n in numbers]

如果请求不在letters,您将拥有-1。请注意,此处-1表示请求不存在。 letters[-1]返回元组的最后一个元素。

答案 1 :(得分:1)

我喜欢使用map函数 - 这是应用新技术的一个很大的问题。

def get_index(letters, element):
    return letters.index(str(element))

indices_of_numbers = list(map(get_index, numbers))

我们可以将它包装在一个函数中,这样我们就可以从letters中删除get_index参数。

def get_indices_of_numbers(letters, numbers):
    def get_index(element):
        return letters.index(str(element))

    indices_of_numbers = list(map(get_index, numbers))
    return indices_of_numbers

答案 2 :(得分:1)

您可以将letters转换为int数组,然后使用np.searchsorted -

np.asarray(letters,dtype=int).searchsorted(numbers)

示例运行 -

In [42]: letters = ('1', '2', '3', '5', '8', '13', '21')

In [43]: numbers = [3, 8, 13, 21, 5]

In [44]: np.asarray(letters,dtype=int).searchsorted(numbers)
Out[44]: array([2, 4, 5, 6, 3])

如果letters未对int数组版本进行排序,我们需要使用sorter输入附加参数searchsorted