, , . .
sentences = [
"I am the walrus",
"I am in London",
"I am in London tonight",
"I am in San Fran tomorrow",
"I am in Paris next Wednesday"
]
sentences *= 1000
listOfPlaces = {"london", "paris", "san fran"}
listOfTimePhrases = {"tonight", "tomorrow", "week", "monday", "wednesday", "month"}
sentences = [ ' ' + x.lower() + ' ' for x in sentences ]
listOfPlaces = { ' ' + x.lower() + ' ' for x in listOfPlaces }
listOfTimePhrases = { ' ' + x.lower() + ' ' for x in listOfTimePhrases }
def foo():
sntceIdxofPlaces = [pos for pos, sentence in enumerate(sentences) if any(x in sentence for x in listOfPlaces)]
sntceIdxofTimes = [pos for pos, sentence in enumerate(sentences) if any(x in sentence for x in listOfTimePhrases)]
return sntceIdxofPlaces, sntceIdxofTimes
def foo2():
sntceIdxofPlaces = []
sntceIdxofTimes = []
for pos, sentence in enumerate(sentences):
if any(x in sentence for x in listOfPlaces): sntceIdxofPlaces.append(pos)
if any(x in sentence for x in listOfTimePhrases): sntceIdxofTimes.append(pos)
return sntceIdxofPlaces, sntceIdxofTimes
def foo3():
sntceIdxofPlaces = []
sntceIdxofTimes = []
for pos, sentence in enumerate(sentences):
for x in listOfPlaces:
if x in sentence: sntceIdxofPlaces.append(pos); break
for x in listOfTimePhrases:
if x in sentence: sntceIdxofTimes.append(pos); break
return sntceIdxofPlaces, sntceIdxofTimes
:
In [171]: timeit foo()
100 loops, best of 3: 15.6 ms per loop
In [172]: timeit foo2()
100 loops, best of 3: 16 ms per loop
In [173]: timeit foo3()
100 loops, best of 3: 8.07 ms per loop
, any() , . , , . , , -2 foo2() foo3(), , , .
: listOfPlaces listOfTimePhrases , , , , set list s.