wasm-demo/demo/ermis-f/python_m/cur/0353

63 lines
1.9 KiB
Plaintext

From: sdm7g at Virginia.EDU (Steven D. Majewski)
Date: Fri, 23 Apr 1999 21:35:32 -0400 (EDT)
Subject: Efficient List Subtraction
In-Reply-To: <3720EF73.CA7DDEFF@Colorado.edu>
References: <3720EF73.CA7DDEFF@Colorado.edu>
Message-ID: <Pine.A32.3.90.990423212522.23052J-100000@elvis.med.Virginia.EDU>
Content-Length: 1555
X-UID: 353
On Fri, 23 Apr 1999, KELLEY SCOTT T wrote:
>
> Does anyone out there have a simple way to compare two lists (some operator perhaps) and
> return
> a list of *differences*? By differences, I mean the following: If had two
> lists like,
>
> a = [1, 4, 5, 100]
> b = [4, 5]
>
> the difference between a and b (a-b) would be [1, 100]. I suppose you could
> write a couple of for loops to go through each list and compare them, but I
> thought there might be a simple way to do this.
>
> I'm also interested in a simple way to returning a list of what is identical between the
> two lists.
> In the case of the above lists, a and b, they both contain [4, 5].
>
Well -- it's probably not the most efficient, but the simplest
list intersection is probably:
>>> a = [1,4,5,100]
>>> b = [4,5]
>>> filter( lambda x: x in a, b )
[4, 5]
>>> filter( lambda x: x in b, a ) # order doesn't matter
[4, 5] # for intersection
# but it does for set-difference
>>> filter( lambda x: x not in a, b ) # b - a
[]
>>> filter( lambda x: x not in b, a ) # a - b
[1, 100]
I don't think union or XOR can be done as concisely.
---| Steven D. Majewski (804-982-0831) <sdm7g at Virginia.EDU> |---
---| Department of Molecular Physiology and Biological Physics |---
---| University of Virginia Health Sciences Center |---
---| P.O. Box 10011 Charlottesville, VA 22906-0011 |---
Caldera Open Linux: "Powerful and easy to use!" -- Microsoft(*)
(*) <http://www.pathfinder.com/fortune/1999/03/01/mic.html>