我是Python編程語言的新手。我正在尋找如何獲得矩陣中特定元素的索引(行和列)。如何獲得python矩陣中特定項目的索引
在其他我的方式,我想要使用列表做這個源代碼相同。
myList=[1,10,54,85]
myList.index(54)
問候
我是Python編程語言的新手。我正在尋找如何獲得矩陣中特定元素的索引(行和列)。如何獲得python矩陣中特定項目的索引
在其他我的方式,我想要使用列表做這個源代碼相同。
myList=[1,10,54,85]
myList.index(54)
問候
這裏有一個簡單的函數(如果沒有索引被發現或None
),它返回的座標作爲一個元組。請注意,這是用於2D矩陣,並返回矩陣中元素的第一個實例。
(編輯:見hiro protagonist's answer一種替代Python的版本)
def find(element, matrix):
for i in range(len(matrix)):
for j in range(len(matrix[i])):
if matrix[i][j] == element:
return (i, j)
或者,如果你想找到的所有索引,而不是僅僅第一:
def findall(element, matrix):
result = []
for i in range(len(matrix)):
for j in range(len(matrix[i])):
if matrix[i][j] == element:
result.append((i, j))
return result
你可以用它像這樣:
A = [[5, 10],
[15, 20],
[25, 5]]
find(25, A) # Will return (2, 0)
find(50, A) # Will return None
findall(5, A) # Will return [(0, 0), (2, 1)]
findall(4, A) # Will return []
a(in m Ÿ意見)的FlipTack's altorithm的更Python版本:
def find(element, matrix):
for i, matrix_i in enumerate(matrix):
for j, value in enumerate(matrix_i):
if value == element:
return (i, j)
在Python它往往是更自然遍歷列表,而不僅僅是指數的要素;如果指數也需要,enumerate
有幫助。這也更有效率。
注意:就像list.index
(沒有第二個參數),這隻會查找第一個匹配項。
好的!我經常忘記'枚舉'。 – FlipTack
既然你說你是初學者,請原諒我,如果你已經知道下面的一些。爲了以防萬一,我將描述可用於編寫自己的函數的基本邏輯,或者更好地理解在此處發佈的其他答案: 要訪問列表的特定行中的元素,例如,如果要獲取第一個元素元素並將其保存在一個變量中:
myList=[1,10,54,85]
myvar = myList[0] # note that you access the first element with index 0
myvar現在存儲1.爲什麼索引0?將該索引看作是「從元素列表開始多遠」的指標。換句話說,第一個元素距離開始的距離爲0。 如果您有像這樣的多維列表,該怎麼辦?
multi = [[0, 1, 2],
[3, 4, 5],
[6, 7, 8]
]
現在你考慮行和列(當然,你可以有n維列表並繼續)。
如何檢索5?這是從行列表開始的1行到離開子列表開始2列的距離。 然後:
myvar = multi[1][2]
檢索5.
FlipTack的和紘主角的功能包裹在漂亮的緊湊程序,其搜索整個2維列表這樣的邏輯,比較元件,直到所需的一個被發現,然後返回索引的元組或繼續搜索重複的元素。請注意,如果您的列表保證排序,則可以跨行和列使用二進制搜索算法,並快速獲得答案,但現在無需擔心。 希望這有助於。
您也可以添加一個標籤到您的功能來搜索輸入矩陣/列表的出現。
例如:
如果輸入是一維矢量:
def get_index_1d(a = [], val = 0, occurrence_pos = False):
if not occurrence_pos:
for k in range(len(a)):
if a[k] == val:
return k
else:
return [k for k in range(len(a)) if a[k] == val]
輸出:
a = [1,10,54,85, 10]
index = get_index_1d(a, 10, False)
print("Without occurrence: ", index)
index = get_index_1d(a, 10, True)
print("With occurrence: ", index)
>>> Without occurrence: 1
>>> With occurrence: [1, 4]
對於2D矢量:
def get_index_2d(a = [], val = 0, occurrence_pos = False):
if not occurrence_pos:
for k in range(len(a)):
for j in range(len(a[k])):
if a[k][j] == val:
return (k, j)
else:
return [(k, j) for k in range(len(a)) for j in range(len(a[k])) if a[k][j] == val]
輸出:
b = [[1,2],[3,4],[5,6], [3,7]]
index = get_index_2d(b, 3, False)
print("Without occurrence: ", index)
index = get_index_2d(b, 3, True)
print("With occurrence: ", index)
>>> Without occurrence: (1, 0)
>>> With occurrence: [(1, 0), (3, 0)]
你在Python中稱爲'矩陣'?清單列表? numpy數組? ...? –