[Tutor] partial string matching in list comprehension?

Wolfram Kraus kraus at hagen-partner.de
Fri May 26 13:02:49 CEST 2006


Kent Johnson wrote:
> Wolfram Kraus wrote:
> 
>>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]]
> 
> A little cleaner is
>     [ j for j in junkList if j not in x.lower() ]
> 
> This will compute x.lower() for each element of junkList...
> 
> Kent
> 

Ahh, yes. Stupid old string methods :-S
But you are not quite correct, it has to be

[x for x in l if not [j for j in junkList if j in x.lower() ]]

See the "not"-ed parts ;-)

Wolfram



More information about the Tutor mailing list