Pythonic way to determine if one char of many in a string
odeits
odeits at gmail.com
Fri Feb 20 22:14:02 EST 2009
On Feb 15, 11:31 pm, odeits <ode... at gmail.com> wrote:
> On Feb 15, 9:56 pm, Chris Rebert <c... at rebertia.com> wrote:
>
>
>
> > On Sun, Feb 15, 2009 at 9:17 PM, <pyt... at bdurham.com> wrote:
> > > I need to test strings to determine if one of a list of chars is in the
> > > string. A simple example would be to test strings to determine if they have
> > > a vowel (aeiouAEIOU) present.
>
> > > I was hopeful that there was a built-in method that operated similar to
> > > startswith where I could pass a tuple of chars to be tested, but I could not
> > > find such a method.
>
> > > Which of the following techniques is most Pythonic or are there better ways
> > > to perform this type of match?
>
> > > # long and hard coded but short circuits as soon as match found
> > > if 'a' in word or 'e' in word or 'i' in word or 'u' in word or ... :
>
> > > -OR-
>
> > > # flexible, but no short circuit on first match
> > > if [ char for char in word if char in 'aeiouAEIOU' ]:
>
> > Just use the fairly new builtin function any() to make it short-circuit:
>
> > if any(char.lower() in 'aeiou' for char in word):
> > do_whatever()
>
> > Cheers,
> > Chris
>
> > --
> > Follow the path of the Iguana...http://rebertia.com
>
> If you want to generalize it you should look at setshttp://docs.python.org/library/sets.html
>
> It seems what you are actually testing for is if the intersection of
> the two sets is not empty where the first set is the characters in
> your word and the second set is the characters in your defined string.
To expand on what I was saying I thought i should provide a code
snippet:
WORD = 'g' * 100
WORD2 = 'g' * 50 + 'U'
VOWELS = 'aeiouAEIOU'
BIGWORD = 'g' * 10000 + 'U'
def set_test(vowels, word):
vowels = set( iter(vowels))
letters = set( iter(word) )
if letters & vowels:
return True
else:
return False
with python 2.5 I got 1.30 usec/pass against the BIGWORD
More information about the Python-list
mailing list