Separating elements from a list according to preceding element

James Stroud jstroud at ucla.edu
Sun Mar 5 15:26:32 EST 2006


Gerard Flanagan wrote:
> Rob Cowie wrote:
> 
>>I'm having a bit of trouble with this so any help would be gratefully
>>recieved...
>>
>>After splitting up a url I have a string of the form
>>'tag1+tag2+tag3-tag4', or '-tag1-tag2' etc. The first tag will only be
>>preceeded by an operator if it is a '-', if it is preceded by nothing,
>>'+' is to be assumed.
>>
>>Using re.split, I can generate a list that looks thus:
>>['tag1', '+', 'tag2', '+', 'tag3', '-', 'tag4']
>>
>>I wish to derive two lists - each containing either tags to be
>>included, or tags to be excluded. My idea was to take an element,
>>examine what element precedes it and accordingly, insert it into the
>>relevant list. However, I have not been successful.
>>
>>Is there a better way that I have not considered? If this method is
>>suitable, how might I implement it?
>>
>>Thanks all,
>>
>>Rob Cowie
> 
> 
> a = [ '+', 'tag1', '+', 'tag2', '-', 'tag3', '+', 'tag4' ]
> 
> import itertools
> 
> b = list(itertools.islice(a,0,8,2))
> c = list(itertools.islice(a,1,8,2))
> 
> result1 = [x[1] for x in itertools.izip(b,c) if x[0] == '+']
> result2 = [x[1] for x in itertools.izip(b,c) if x[0] == '-']
> 
> print
> print result1
> print result2
> 
> 
> Gerard
> 

Unfortunately this does not address the complete specification:

 >>> a = [ 'tag1', '+', 'tag2', '-', 'tag3', '+', 'tag4' ]
 >>>
 >>> import itertools
 >>>
 >>> b = list(itertools.islice(a,0,len(a),2))
 >>> c = list(itertools.islice(a,1,len(a),2))
 >>>
 >>> result1 = [x[1] for x in itertools.izip(b,c) if x[0] == '+']
 >>> result2 = [x[1] for x in itertools.izip(b,c) if x[0] == '-']
 >>>
 >>> print

 >>> print result1
[]
 >>> print result2
[]

Need to check for the absence of that first op.

James



More information about the Python-list mailing list