[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