Puzzled
Colin J. Williams
cjw at sympatico.ca
Tue Jul 12 09:20:17 EDT 2005
Bengt Richter wrote:
> On Mon, 11 Jul 2005 22:10:33 -0400, "Colin J. Williams" <cjw at sympatico.ca> wrote:
>
>
>>The snippet of code below gives the result which follows
>>
>>for k in ut.keys():
>> name= k.split('_')
>> print '\n1', name
>> if len(name) > 1:
>> name[0]= name[0] + name[1].capitalize()
>> print '2', name
>> name[0]= name[0].capitalize()
>> print '3', name
>>
>>1 ['logical', 'or']
>>2 ['logicalOr', 'or']
>>3 ['Logicalor', 'or']
>>
>>I was expecting that 3 would read ['LogicalOr', 'or']
>>
>>If I replace the above code with:
>>
>>for k in ut.keys():
>> name= k.split('_')
>> print '\n1', name
>> if len(name) > 1:
>> name[0]= name[0].capitalize() + name[1].capitalize()
>> print '2', name
>> else:
>> name[0]= name[0].capitalize()
>> print '3', name
>>
>>I get the desired result.
>>
>
> If you walk through the results, you can see what happens to name[2] on output line 2:
>
> >>> 'logicalOr'.capitalize()
> 'Logicalor'
>
> I.e.,
> >>> help(str.capitalize)
> Help on method_descriptor:
>
> capitalize(...)
> S.capitalize() -> string
>
> Return a copy of the string S with only its first character
> capitalized. ^^^^-- meaning all the rest lowercased,
> which changed your trailing 'Or'
>
> So, doing .capitalize on all the pieces from split('_') and then joining them:
>
> >>> def doit(w): return ''.join([s.capitalize() for s in w.split('_')])
> ...
> >>> doit('logical_or')
> 'LogicalOr'
> >>> doit('logical')
> 'Logical'
> >>> doit('logical_or_something')
> 'LogicalOrSomething'
> >>> doit('UP_aNd_down')
> 'UpAndDown'
>
> Regards,
> Bengt Richter
Many thanks. I missed the implication that any upper case characters
after the first are changed to lower case.
Colin W.
More information about the Python-list
mailing list