Lining Up and PaddingTwo Similar Lists

castironpi castironpi at gmail.com
Fri Aug 29 00:07:30 EDT 2008


On Aug 28, 10:50 pm, "W. eWatson" <notval... at sbcglobal.net> wrote:
> Maybe there's some function like zip or map that does this. If not, it's
> probably fairly easy to do with push and pop. I'm just checking to see if
> there's not some known simple single function that does what I want. Here's
> what I'm trying to do.
>
> I have a list dat like (assume the items are strings even thought I'm
> omitting quotes.):
> [a.dat, c.dat, g.dat, k.dat, p.dat]
>
> I have another list called txt that looks like:
> [a.txt, b.txt, g.txt, k.txt r.txt, w.txt]
>
> What I need is to pair up items with the same prefix and use "None", or some
> marker, to indicate the absence of the opposite item. That is, in non-list
> form, I want:
> a.dat a.txt
> None  b.txt
> c.dat None
> g.dat g.txt
> k.dat k.txt
> p.dat  None
> None  r.txt
> None  w.txt
>
> Ultimately, what I'm doing is to find the missing member of pairs.
> --
>             Wayne Watson (Watson Adventures, Prop., Nevada City, CA)
>
>               (121.015 Deg. W, 39.262 Deg. N) GMT-8 hr std. time)
>                Obz Site:  39° 15' 7" N, 121° 2' 32" W, 2700 feet
>
>                      Web Page: <www.speckledwithstars.net/>

This gets you your list.  What do you mean by 'missing member of
pairs'?  If you mean, 'set of elements that appear in both' or 'set
that appears in one but not both', you can short circuit it at line
14.

-warning, spoiler-

dat= ['a.dat', 'c.dat', 'g.dat', 'k.dat', 'p.dat']
dat.sort()
txt= ['a.txt', 'b.txt', 'g.txt', 'k.txt', 'r.txt', 'w.txt']
txt.sort()
import os.path
datD= {}
for d in dat:
    r,_= os.path.splitext( d )
    datD[ r ]= d
txtD= {}
for d in txt:
    r,_= os.path.splitext( d )
    txtD[ r ]= d
both= sorted( list( set( datD.keys() )| set( txtD.keys() ) ) )

print datD
print txtD
print both

for i, x in enumerate( both ):
    both[ i ]= datD.get( x, None ), txtD.get( x, None )

print both

OUTPUT:

{'a': 'a.dat', 'p': 'p.dat', 'c': 'c.dat', 'k': 'k.dat', 'g': 'g.dat'}
{'a': 'a.txt', 'b': 'b.txt', 'g': 'g.txt', 'k': 'k.txt', 'r': 'r.txt',
'w': 'w.t
xt'}
['a', 'b', 'c', 'g', 'k', 'p', 'r', 'w']
[('a.dat', 'a.txt'), (None, 'b.txt'), ('c.dat', None), ('g.dat',
'g.txt'), ('k.d
at', 'k.txt'), ('p.dat', None), (None, 'r.txt'), (None, 'w.txt')]



More information about the Python-list mailing list