Which method to check if string index is queal to character.

Terry Reedy tjreedy at udel.edu
Mon Dec 28 12:43:27 EST 2020


On 12/28/2020 11:31 AM, Bischoop wrote:
> I'd like to check if there's "@" in a string

Use the obvious "'@' in string".
  > and wondering if any method is better/safer than others.

Any special purpose method built into the language is likely to be 
fastest.  Safest?  What danger are you worried about?

> I was told on one occasion that I should
> use is than ==, so how would be on this example.

'is' is for detecting an exact match with a particular, singular object. 
  In particular, None, False, or True or user created objects meant for 
such use.

> s = 'this at mail.is'

> I want check if string is a valid email address.

There are two levels of validity: has the form of an address, which is 
much more complicated than the presence of an '@', and corresponds to a 
real email account.

> 
> code '''
> import time
> 
> email = "ten at mail.tu"
> 
> start_time = time.time()
> for i in range(len(email)):
>    print('@' in email[i])

This scans the entire string in a slow way, then indirectly performs '@' 
== char in a slow way.

> print ("My program took", time.time() - start_time, "to run")
> 
> 
> print('----------')
> start_time = time.time()
> for i in range(len(email)):
>      print(email[i] == '@')

Slightly better, does comparison directly.

for c in email:
    print(c == '@')

Faster and better way to scan.

for c in email:
    print(c == '@')
    break

Stops at first '@'.  '@' in email does the same, but should be slightly 
faster as it implements loop and break in the interpreter's 
implementation language.

> print ("My program took", time.time() - start_time, "to run")
> print('----------')
> start_time = time.time()
> if '@' in email:
>      print('True')
> 
> print ("My program took", time.time() - start_time, "to run")
> 
> '''
> 


-- 
Terry Jan Reedy



More information about the Python-list mailing list