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

Reply via email to