作者oneonesix (小當家)
看板Python
標題[問題] 多個list快速比對
時間Sun Sep 13 06:48:24 2020
例
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://webptt.com/m.aspx?n=bbs/Python/M.1599950908.A.4F3.html
1F:推 SocketAM2: 中間兩行換成 if i in C:09/13 07:00
2F:推 SocketAM2: 數量很大的話還可以把C先做成set09/13 07:06
※ 編輯: oneonesix (39.9.69.100 臺灣), 09/13/2020 07:30:23
3F:推 remia81: numpy.array(B)[numpy.isin(A,C)]或list comprehension 09/13 08:08
4F:→ remia81: 包起來[B[n] for n,i in enumerate(A) if i in C] 09/13 08:08
5F:推 lemon651: 有個東西叫map 09/13 10:21
6F:→ Pieteacher: 併起來 用 dataframe 的 duplicated() 09/13 11:52
7F:→ LP9527: 資料量大指的是c多以外,ab也很多嗎 09/13 13:30
8F:→ oneonesix: 大量指ABC都約四萬筆左右 09/13 18:26
9F:→ oneonesix: 感謝各位大大分享方法 09/13 18:54
10F:推 germun: B不用包進loop吧 記index就好 然後值會不會重覆也要考慮 09/13 19:12
11F:推 hsnusonic: 同一樓,先把C變set會比較快 09/14 01:34
12F:推 ro9956882: 好set直接把O(n^2)變O(n) 不用嗎 09/14 02:41
13F:推 tacovirus: 不管多努力都贏不過平行運算 09/20 13:33