我正在嘗試定位 list 的索引位置B:(0,2),(2,1)相對于 list A。但是有一個錯誤。附加了所需的輸出。
import numpy
A=[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
B=[(0,2),(2,1)]
C=B.index(A)
print("C =",C)
錯誤是
<module>
C=B.index(A)
ValueError: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] is not in list
所需的輸出是
[3,8]
uj5u.com熱心網友回復:
要獲取所需對的索引,您可以執行以下操作:
a=[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
b=[(0,2),(2,1)]
c=[a.index(b_item) for b_item in b]
print("C =", c)
這將列印 [2,7](從 0 開始的索引)。或者,如果您希望從 1 開始的索引作為輸出(結果 [3,8]):
a=[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
b=[(0,2),(2,1)]
c=[a.index(b_item) 1 for b_item in b]
print("C =", c)
請注意,如果該對不在串列 a 中,這將導致錯誤。如果您想避免錯誤,try您可以使用。except ValueError
uj5u.com熱心網友回復:
我認為您嘗試做的事情可以通過以下串列理解來解決:
import numpy
A=[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
B=[(0,2),(2,1)]
C= [A.index(element) for element in B]
print("C =",C)
這將回傳:
[2,7]
如果您希望它回傳所需的輸出,只需執行以下操作:
C= [A.index(element) 1 for element in B]
uj5u.com熱心網友回復:
因為你標記麻木的. 您需要檢查每一行的B每一行,A然后使用numpy.alland numpy.any。(但你需要在python中考慮,如果你想要[3,8],索引從零開始。你需要 1結果。)
>>> np.argwhere((A==B[:,None]).all(-1).any(0)).ravel()
array([2, 7])
解釋:
>>> A = np.asarray(A)
>>> B = np.asarray(B)
>>> A == B[:,None]
array([[[ True, False],
[ True, False],
[ True, True],
[False, False],
[False, False],
[False, True],
[False, False],
[False, False],
[False, True]],
[[False, False],
[False, True],
[False, False],
[False, False],
[False, True],
[False, False],
[ True, False],
[ True, True],
[ True, False]]])
>>> (A==B[:,None]).all(axis=-1)
array([[False, False, True, False, False, False, False, False, False],
[False, False, False, False, False, False, False, True, False]])
>>> (A==B[:,None]).all(axis=-1).any(axis=0) <- you want index of this array that have `True` value
array([False, False, True, False, False, False, False, True, False])
>>> np.argwhere((A==B[:,None]).all(axis=-1).any(axis=0))
array([[2],
[7]])
>>> np.argwhere((A==B[:,None]).all(axis=-1).any(axis=0)).ravel()
array([2, 7])
uj5u.com熱心網友回復:
好的,Olli 的回答顯然是正確的,但是我覺得您的帖子中有一些誤解需要解釋一下。
C=B.index(A)要求Ain的位置B,我認為這與您想要的完全相反。因此,錯誤A不在B. 但即使A.index(B)會給出錯誤,因為B作為一個整體再一次不在A.
您想知道的是 的A每個單個元素的位置B,或者更準確地說是A的每個元素的第一次出現的位置B。因此,您需要遍歷 的每個元素B并在A. 這可以通過幾種不同的方式完成,但邏輯總是相同的
uj5u.com熱心網友回復:
假設A沒有重復項并且Bs 包含在 中A,您可以根據以下答案執行此操作:
(np.array(A)[:, None] == np.array(B)).all(-1).argmax(0) 1
# [3, 8]
我使用過 1是因為 Numpy 陣列中的索引從0. 我建議使用 numpy 等效方法而不是回圈,因為在處理大型陣列時,它們在性能方面會比回圈好得多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/494397.html
下一篇:一步將多個元素插入陣列
