[Tutor] Replace sequence in list - looking for direction

peter hodgson imputerate at puteracy.com
Sat Sep 6 09:58:47 CEST 2008


greetings, fellow ventriloquists; 

the exchanges on this list are great tutorials; sometimes i don't quite
get the finer points; like here:

On Mon, Jun 16, 2008 at 10:41 AM, GTXY20 <gtxy20 at gmail.com> wrote:
> Let's say I have a list like the following:
> 
> a = ['a1','a2','a3','a4','a5','a6']
> 
> and then I have dictionary like the following:
> 
> b = {'a1,a2,a3':'super'}
> 
> I need some direction and thoughts on how I might seach the list for the
> string (the key in dict b) sequence in list a and replace the occurance with
> the value from dict b. At the end I would like to have list a represented
> as:
> 
> a = ['super', 'a4', 'a5', 'a6']

the solution:
From: Tiago Saboga <tiagosaboga at gmail.com>

The following works for your example. I assume the values in the a
list are unique.

for key in b:
    keylist = key.split(',')
    if keylist < a:
        i = a.index(keylist[0])
        print a[:i] + [b[key]] + a[i+len(keylist):]

---------------------
but this works, too; 

>>> a = ['a1','a2','a3','a4','a5','a6']
>>> b = {'a1,a2,a3':'super'}
>>> for key in b:
...     keylist = key.split(',')
...     i = a.index(keylist[0])
...     print [b[key]] + a[i+len(keylist):]
... 
['super', 'a4', 'a5', 'a6']
-----------------------

now, i get it, mostly; but keylist being shorter than the list "a"

>>> keylist < a
True

doesn't seem relevant, unless the 'for' statement were to go on and on;


and if a[:i] = zilch:

>>> for key in b:
...     keylist = key.split(',')  
...     if keylist < a:             # DOES THIS MEAN LENGTH?
...         i = a.index(keylist[0]) # a[index of first item in the key == 0];
...         print a[:i]             # a[:0] == pre-first item == None;
... 
[]

then why bother with that part?

---------------------------------

finally, how might the code handle a dictionary with more than one item?

since i figured the line 
 if keylist < a:
might be part of some kind of iteration, say, until all of the items in
"a" had been replaced by dictionary values,


this is as far as i got:

>>> a = ['a','b','c','d','e','f']
>>> b = {'a,b':'firstval', 'c,d':'secondval'}
>>> for key in b:
...     keylist = key.split(',')  
...     if keylist < a:
...         i = a.index(keylist[0])
...         print a[:i] + [b[key]] + a[i+len(keylist):]
... 
['firstval', 'c', 'd', 'e', 'f']

but 'secondval' did not replace 'c' and 'd' in "a";

what am i missing? thanks, imputerate 


More information about the Tutor mailing list