get each pair from a string.

Emile van Sebille emile at fenx.com
Mon Oct 22 04:03:30 EDT 2012


On 10/21/2012 12:06 PM, Ian Kelly wrote:
> On Sun, Oct 21, 2012 at 12:58 PM, Vincent Davis
> <vincent at vincentdavis.net> wrote:
>> x = 'apple'
>> for f in range(len(x)-1):
>>      print(x[f:f+2])
>>
>> @Ian,
>> Thanks for that I was just looking in to that. I wonder which is faster I
>> have a large set of strings to process. I'll try some timings if I get a
>> chance later today.
>
> The solution you came up with is probably faster, but less general --
> it will only work on sliceable sequences like strings, not arbitrary
> iterables.
>

So the simple loop is the right answer for sliceable sequences like 
strings, but not if your code needs to deal with arbitrary iterables 
such as those that the standard library authors are expected to handle.

So, as OP's a self confessed newbie asking about slicing, why provide an 
example requiring knowledge of tee, enumerate, next and izip?

def nwise(iterable, n=2):
     iters = tee(iterable, n)
     for i, it in enumerate(iters):
         for _ in range(i):
             next(it, None)
     return izip(*iters)

It's good that the standard library provides these tools as a 
convenience, but when all you need is a derringer, why reach for a howitzer?

Emile





More information about the Python-list mailing list