Hi Nathann! On Dec 10, 9:02 am, Nathann Cohen <nathann.co...@gmail.com> wrote: [...] > time cA=diffA(a,b) > CPU times: user 29.36 s, sys: 0.09 s, total: 29.45 s > Wall time: 29.76 s > > time cB=diffB(a,b) > CPU times: user 0.03 s, sys: 0.01 s, total: 0.04 s > Wall time: 0.04 s
Not a big surprise, I would say. I mean, think what "v in b" does, if b is a list that does not contain v, and what it does if b is a set. AFAIK, a set is internally represented by a sorted binary tree that, ideally, is balanced. So, in order to find out that v is NOT in a list of 1024 elements, you need 1024 comparisons. But to find out that it is not in a set of 1024 elements, you need 10 comparisons. > It may even be interesting to directly write an function computing the > difference of two lists through Sets... What do you mean exactly by "difference of lists"? Note that lists have a fixed order and may contain repetitions, but sets have not. So, list(Set(a).difference(Set(b))) is certainly not what I would call a difference of list a with list b. Example: sage: a = [4,4,2,1,2,3,2,3,1] sage: b = [4,3] sage: Sb = Set(b) sage: list(Set(a).difference(Sb)) [1, 2] Both the sequential order and the multiplicities from the original list are lost! sage: [x for x in a if x not in Sb] [2, 1, 2, 2, 1] This is more like a difference of lists, isn't it? Cheers, Simon -- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org