"str.contains(part)" or alternatives?

Joseph A. Knapka jknapka at earthlink.net
Thu Sep 12 00:18:34 EDT 2002


"Delaney, Timothy" wrote:
> 
> > From: Joseph A. Knapka [mailto:jknapka at earthlink.net]
> >
> > So in 2.3, can I do this and get the expected result?
> >
> > >>> "" in "abc"
> > 1
> 
> Yes - this has been hotly debated and defined as true.
> 
> > >>> for subst in "abc":
> > ...   print subst
> > ...
> > <empty string>
> > a
> > ab
> > abc
> > b
> > bc
> > c
> 
> No. Iterating over a string is defined to return each single character in
> turn. Remember:
> 
>     for subst in "abc":
> 
> is equivalent to
> 
>     for subst in iter("abc"):

I didn't know that (never saw "iter()" before).

> and iter("abc") returns "a", "b", "c"
> 
> whilst
> 
>     if subst in "abc":
> 
> is equivalent to
> 
>     if "abc".__contains__(subst):
> 
> (falling back to if subst in iter("abc") if "abc" does not define
> __contains__)
> 
> and str.__contains__ performs a substring match.

Ah. So we have:

not(X in Y <==> X in [Z for Z in Y])

But only if Y is a string. That strikes me as a trifle odd,
but nevertheless I agree that the "substring in string"
behavior seems more useful.

-- Joe
  "I'd rather chew my leg off than maintain Java code, which
   sucks, 'cause I have a lot of Java code to maintain and
   the leg surgery is starting to get expensive." - Me




More information about the Python-list mailing list