Tycho Andersen wrote: > Terry Reedy wrote: > > ... word[0:1] does the same thing. All Python programmers should learn to > > use slicing to extract a char from a string that might be empty. > > The method call of .startswith() will be slower, I am sure. > > Why? Isn't slicing just sugar for a method call?
Yes, but finding the method doesn't require looking it up by name at run-time, and startswith is built to work for startings of any length. Let's timeit: # ----- from timeit import Timer from random import choice from string import ascii_lowercase as letters strs = [''.join([choice(letters) for _ in range(5)]) for _ in range(5000)] way1 = "[s for s in strs if s.startswith('a')]" way2 = "[s for s in strs if s[:1] == 'a']" assert eval(way1) == eval(way2) for way in [way1, way2]: t = Timer(way, 'from __main__ import strs') print(way, ' took: ', t.timeit(1000)) # ----- On my particular box, I get: [s for s in strs if s.startswith('a')] took: 5.43566498797 [s for s in strs if s[:1] == 'a'] took: 3.20704924968 So Terry Reedy was right: startswith() is slower. I would, nevertheless, use startswith(). Later, if users want my program to run faster and my profiling shows a lot of the run-time is spent finding words that start with 'a', I might switch. -- --Bryan -- http://mail.python.org/mailman/listinfo/python-list