作者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/cn.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