[Tutor] partial string matching in list comprehension?

Wolfram Kraus kraus at hagen-partner.de
Fri May 26 09:41:55 CEST 2006


doug shawhan wrote:
> I have a series of lists to compare with a list of exclusionary terms.
> 
> 
> 
> junkList =["interchange",  "ifferen", "thru"]
> 
> The comparison lists have one or more elements, which may or may not 
> contain the junkList elements somewhere within:
> 
> l = ["My skull hurts", "Drive the thruway", "Interchangability is not my 
> forte"]
> 
> ... output would be
> 
> ["My skull hurts"]
> 
> I have used list comprehension to match complete elements, how can I do 
> a partial match?
> 
> def removeJunk(reply, junkList):
>         return [x for x in reply if x not in junkList]
> 
> It would be so much prettier than searching through each list element 
> for each term - I tend to get lost in a maze of twisty corridors, all alike.
> 
> Thanks!
> 
> 
Dunno if the performance of this solution is good and if it is more 
readable then RegExps, but here is LC:
[x for x in l if not [j for j in junkList if x.lower().find(j) > -1]]

 >>> l = ["My skull hurts", "Drive the thruway", "Interchangability is 
not my forte"]
 >>> junkList =["interchange",  "ifferen", "thru"]
 >>> [x for x in l if not [j for j in junkList if x.lower().find(j) > -1]]
['My skull hurts', 'Interchangability is not my forte']
                               ^ Is there an "e" missing?

Because I don't like RegExps! ;-)

HTH,
Wolfram



More information about the Tutor mailing list