[問題] 多個list快速比對

看板Python作者 (小當家)時間4年前發表 (2020/09/12 22:48), 4年前編輯推噓8(805)
留言13則, 10人參與, 4年前最新討論串1/3 (看更多)
例 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) ----- Sent from JPTT on my iPhone -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.9.69.100 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1599950908.A.4F3.html

09/13 07:00, 4年前 , 1F
中間兩行換成 if i in C:
09/13 07:00, 1F

09/13 07:06, 4年前 , 2F
數量很大的話還可以把C先做成set
09/13 07:06, 2F
※ 編輯: oneonesix (39.9.69.100 臺灣), 09/13/2020 07:30:23

09/13 08:08, 4年前 , 3F
numpy.array(B)[numpy.isin(A,C)]或list comprehension
09/13 08:08, 3F

09/13 08:08, 4年前 , 4F
包起來[B[n] for n,i in enumerate(A) if i in C]
09/13 08:08, 4F

09/13 10:21, 4年前 , 5F
有個東西叫map
09/13 10:21, 5F

09/13 11:52, 4年前 , 6F
併起來 用 dataframe 的 duplicated()
09/13 11:52, 6F

09/13 13:30, 4年前 , 7F
資料量大指的是c多以外,ab也很多嗎
09/13 13:30, 7F

09/13 18:26, 4年前 , 8F
大量指ABC都約四萬筆左右
09/13 18:26, 8F

09/13 18:54, 4年前 , 9F
感謝各位大大分享方法
09/13 18:54, 9F

09/13 19:12, 4年前 , 10F
B不用包進loop吧 記index就好 然後值會不會重覆也要考慮
09/13 19:12, 10F

09/14 01:34, 4年前 , 11F
同一樓,先把C變set會比較快
09/14 01:34, 11F

09/14 02:41, 4年前 , 12F
好set直接把O(n^2)變O(n) 不用嗎
09/14 02:41, 12F

09/20 13:33, 4年前 , 13F
不管多努力都贏不過平行運算
09/20 13:33, 13F
文章代碼(AID): #1VNL0yJp (Python)
討論串 (同標題文章)
文章代碼(AID): #1VNL0yJp (Python)