Pythonic way to determine if one char of many in a string

Nicolas Dandrimont Nicolas.Dandrimont at crans.org
Mon Feb 16 00:28:46 EST 2009


* python at bdurham.com <python at bdurham.com> [2009-02-16 00:17:37 -0500]:

> 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' ]:
> -OR-
> # flexible, but no short circuit on first match
> if set( word ).intersection( 'aeiouAEIOU' ):

I would go for something like:

for char in word:
    if char in 'aeiouAEIUO':
        char_found = True
        break
else:
    char_found = False

(No, I did not forget to indent the else statement, see
http://docs.python.org/reference/compound_stmts.html#for)

It is clear (imo), and it is seems to be the intended idiom for a search
loop, that short-circuits as soon as a match is found.

Cheers,
-- 
Nicolas Dandrimont

linux: the choice of a GNU generation
(ksh at cis.ufl.edu put this on Tshirts in '93)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 204 bytes
Desc: Digital signature
URL: <http://mail.python.org/pipermail/python-list/attachments/20090216/371efa24/attachment.sig>


More information about the Python-list mailing list