[問題] 多個list快速比對

作者: oneonesix (小韓)   2020-09-13 06:48:24

A= [1,2,3,4]
B= [5,6,7,8]
C= [1,3,4,5,7]
然後我需要A和C比對,
如果一樣就顯示相對於A同位置的B,
A和B的個數都是一樣的
例如
A[3] = C[2] ,然後顯示B [3]
小弟目前只會笨笨的用迴圈去比對,
但是資料量一大的話就會很久
請問有大大有更好的方法嗎?

for i,j in zip(A,B):
for k in C:
If i==k:
Print(j)
作者: SocketAM2 (AM2)   2020-09-13 07:00:00
中間兩行換成 if i in C:數量很大的話還可以把C先做成set
作者: remia81   2020-09-13 08:08:00
numpy.array(B)[numpy.isin(A,C)]或list comprehension包起來[B[n] for n,i in enumerate(A) if i in C]
作者: lemon651 (小明)   2020-09-13 10:21:00
有個東西叫map
作者: Pieteacher (pieteacher)   2020-09-13 11:52:00
併起來 用 dataframe 的 duplicated()
作者: LP9527 (ㄊㄇ抽菸都去)   2020-09-13 13:30:00
資料量大指的是c多以外,ab也很多嗎
作者: oneonesix (小韓)   2020-09-13 18:26:00
大量指ABC都約四萬筆左右
作者: germun (ger)   2020-09-13 19:12:00
B不用包進loop吧 記index就好 然後值會不會重覆也要考慮
作者: hsnusonic (sonic)   2020-09-14 01:34:00
同一樓,先把C變set會比較快
作者: ro9956882 (幽靈)   2020-09-14 02:41:00
好set直接把O(n^2)變O(n) 不用嗎
作者: tacovirus (小璋丸)   2020-09-20 13:33:00
不管多努力都贏不過平行運算

Links booklink

Contact Us: admin [ a t ] ucptt.com