我知道這與Efficient way to compare elements in 2 lists類似,但我基本上在這個問題上有一個擴展。比較兩個列表中元素的有效方法?
說我有兩個列表:
a = [1,2,4,1,0,3,2]
b = [0,1,2,3,4]
我想找出a
指數,其中元素等於b
每個元素。
例如,我希望b[1]
的示例輸出告訴我,在[0,3]
。
數據幀輸出將是有用的,是這樣的:
b index_a
0 4
1 0
1 3
2 1
2 6
3 5
4 3
我使用之前是:
b = pd.DataFrame(b)
a = pd.DataFrame(a)
pd.merge(b.reset_index(),a.reset_index(),
left_on=b.columns.tolist(),
right_on = a.columns.tolist(),
suffixes = ('_b','_a'))['index_b','index_a']]
不過,我不能確定這是否是必要的,因爲這些都是名單。 (我在處理數據框時以前使用過這種方法)。
我正在做這個操作數千次與更大的列表,所以我想知道是否有一個更有效的方法。
此外,B只是list(range(X))
其中在這種情況下X = 5
如果任何人有一些投入我不勝感激!
感謝
我們可以假定'了'的所有元素將被包含在'B'? –
呃,'b'沒用。真正的信息只是'N'。您可以創建一個從範圍爲'0..N-1'的值到'a'的索引的映射。而要建立這個映射,你只需循環「a」。請注意,'b'中值爲'x'的元素在索引'x'處(因爲'b = list(range(N))')。事實上,如果映射具有連續的整數作爲關鍵字,則列表列表就足夠了:'indices = [[] for _in b];對於我,枚舉(一):索引[x] .append(i)' – Bakuriu
是的,抱歉,我應該提到這一點。 –