我有一个清单:
letters = ('1', '2', '3', '5', '8', '13', '21')
编号为8
,我可以将其作为索引的索引:
letters.index('8')
不,我有一个只包含字母数字的数组。
numbers = [3, 8, 13, 21, 5]
如何在每个元素上调用index(或类似)函数?
我想得到的是[2, 4, 5, 6, 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
。