Best way to compare a list?

F

Fazer

Hello,

I was wondering which would be the best way to compare a list?

I was thinking of just using a for loop and testing the condition.

What do you guys think? The best/fastest way of comparing lists.

Thanks,

Faizan
 
J

John Hunter

Fazer> Hello, I was wondering which would be the best way to
Fazer> compare a list?

Fazer> I was thinking of just using a for loop and testing the
Fazer> condition.

Fazer> What do you guys think? The best/fastest way of comparing
Fazer> lists.

What do you want to compare for, equality of all elements? Give a
little more info about what you need to do.

JDH
 
F

Fazer

John Hunter said:
Fazer> Hello, I was wondering which would be the best way to
Fazer> compare a list?

Fazer> I was thinking of just using a for loop and testing the
Fazer> condition.

Fazer> What do you guys think? The best/fastest way of comparing
Fazer> lists.

What do you want to compare for, equality of all elements? Give a
little more info about what you need to do.

JDH

Sorry about that.

Basically, I have to lists. I have to compare them and pick out the difference(s).

Maybe the simple/fast approach would be to use a for loop?

Thanks,
 
J

Jeff Epler

What do you mean by a "difference"? For instance, what are the
differences between these two lists:

[1, 2, 3]
[3, 2, 1]

For some purposes you might want to consider them equivalent, since they
both contain 1, 2 and 3 (one time each) and they contain no other
elements. Or you might want to say that they differ at element 0 and
at element 2.

And for this list, what are the differences?

[1, 3, 4]
[1, 2, 3, 4]

For some purposes, you might say that they differ at indexes 1, 2, and
3. For other purposes, you might want to say that the second list has
an extra "2" inserted at position 1, but the lists are otherwise the
same.

Once you define what you mean by "differences", perhaps we can be more
helpful. But once you define exactly what your problem is, the
algorithm to solve it should be more apparent to you, too!

An answer to the simplest of the questions you may have been asking is
this:
[a == b for a, b in zip(l1, l2)]
this returns a list with True in the positions where corresponding
elements of l1 and l2 are equal, and False elsewhere.

Jeff
 
J

Josiah Carlson

Fazer said:
Sorry about that.

Basically, I have to lists. I have to compare them and pick out the difference(s).

Maybe the simple/fast approach would be to use a for loop?

Thanks,

If position information matters to you, I would imagine your initial
code is something like this...

import itertools
def list_differences(a, b):
l = [(x,y) for x,y in itertools.izip(a,b) if x != y]
if len(a) != len(b):
d = abs(len(a)-len(b))
if len(a) < len(b):
l.extend(zip(d*[None], b[len(a):]))
else:
l.extend(zip(a[len(b):], d*[None]))
return l

If position information matters, the above is pretty much optimal.
There doesn't seem to be a method in Python that would further speed up
iterating through two lists.

If positional information doesn't matter, and you just care about
whether or not objects exist in one, the other, or both lists, then I
believe this is easily done with Sets in Python 2.3. I don't know for
sure, I haven't used them yet.


- Josiah
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,176
Messages
2,570,947
Members
47,498
Latest member
log5Sshell/alfa5

Latest Threads

Top