Replacing words from strings except 'and' / 'or' / 'and not'

Berthold Höllmann bhoel at despammed.com
Thu Nov 25 21:20:56 CET 2004


"Caleb Hattingh" <caleb1 at telkomsa.net> writes:

> Oh well, I might as well give it a shot.  I hope nobody has tried map yet?
>
> This is is short and quick, although:
> I sure would appreciate some help changing the list "lkw" into a
> generator  (or something like that) instead...those fancy things are
> still beyond me  :)
>
> '>>> keywords = ['my','is']
> '>>> sentence = 'hi there my name is caleb'
> '>>> lsen = sentence.split()
> '>>> lkw = []
> # Yuck!  isn't there a better way to generate copies of the same list
> in  the "map" below??
> '>>> for i in range(len(lsen)):
> 	lkw.append(keywords)

Maybe here 

'>>> for i in lsen:
	lkw.append(keywords)

is enough?

> 	
> '>>> lkw
> # Like I said, yuck!  For 'map' below, can't we use a generator or
> something like that instead??
> [['my', 'is'], ['my', 'is'], ['my', 'is'], ['my', 'is'], ['my', 'is'],
> ['my', 'is']]
> '>>> def myfunc(kw,word):
> 	if word in kw:
> 		return '*'+word+'*'
> 	else:
> 		return word
>
> 	
> '>>> ans = map(myfunc,lkw,lsen)
> '>>> ans
> ['hi', 'there', '*my*', 'name', '*is*', 'caleb']
> '>>> newSentence = ' '.join(ans)
> '>>> newSentence
> 'hi there *my* name *is* caleb'
> '>>>
My solution would be:

>>> keywords = ['my','is']
>>> sentence = 'hi there my name is caleb'
>>> lsen = sentence.split()
>>> def myfunc(kw,word):
...     if word in kw:
...         return '*%s*' % word
...     else:
...         return word
... 
>>> ans = [ myfunc(keywords, word) for word in lsen ]
>>> ans
['hi', 'there', '*my*', 'name', '*is*', 'caleb']
>>> newSentence = ' '.join(ans)
>>> newSentence
'hi there *my* name *is* caleb'

Kind Regards
Berthold
-- 
berthold at xn--hllmanns-n4a.de / <http://höllmanns.de/>
bhoel at web.de                 / <http://starship.python.net/crew/bhoel/>



More information about the Python-list mailing list