2016-12-08 83 views
0

覆蓋它的價值我有一個列表:調用每個numpy的數組元素的功能,並在Python

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

擁有數8,我可以得到它的指數字母: letters.index('8')

沒有,我有一個只包含字母數字的數組。

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

如何在每個元素上調用索引(或類似)函數?

什麼,我想有[2, 4, 5, 6, 3]

就是這麼能搶陣列,而不是單一元素的索引這樣的功能? 如果所需的字母可以改變陣列

+0

Python術語nitpick:''''是一個元組,而不是一個列表。數字是一個列表,而不是一個數組。 – Benjamin

+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

我喜歡使用map函數 - 這是應用新技術的一個很大的問題。

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

indices_of_numbers = list(map(get_index, numbers)) 

,我們可以在一個函數把這個包,所以我們可以從get_index刪除letters說法。

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 
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數組版本是沒有排序,我們需要輸入searchsorted附加參數sorter

相關問題