[问题] 多个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