[Tutor] Splitting a string

Hugo Arts hugo.yoshi at gmail.com
Tue Feb 8 15:28:56 CET 2011


On Tue, Feb 8, 2011 at 2:47 PM, Christian Witts <cwitts at compuscan.co.za>
>>> `while i<  len(c)` instead of `while 1`
>>>
>>
>> You remind me of me...like it was yesterday. Explanations with no
>> thought. Unimpressive isn't it?
>>
>
> While the index is smaller than the length of the string do your processing.
>  It reads like that.  But thank you for your commentary.
>

The goal of this list is not to criticize, David, but to help. Why not
provide some explanations yourself?

EIther way, even with this correction a ValueError is still raised at
least *once* if the string doesn't end with a 0, so it won't actually
help a bit. A quick fix is to set some variable if you find a 0, then
check on that variable after the loop (See Peter's example).

Now, find is nice if you care about finding one instance, but if you
need to find *all* instances you'll have to check the entire string
anyway, and find becomes a rather cumbersome tool. Interestingly,
enumerate was suggested all the way at the beginning of the thread,
and I think it's the best answer:

zeroes = ["lane fail {0}".format(i) for i, val in enumerate(c) if val == '0']
print '\n'.join(zeroes) if zeroes else "All Lanes pass"

Ok, That looks a little advanced, but strip away all that syntactic
sugar and you arrive at basically this:

zeroes = []
for index, value in enumerate(c):
    if value == '0':
        zeroes.append(index)

if zeroes:
    for x in zeroes:
        print "lane fail", x
else:
    print "all lanes pass"

Since we have to scan the whole string anyway, this is equally
efficient as using find (theoretically!!! if you care about
performance, *measure*).

Hugo


More information about the Tutor mailing list