Natim
Natim

Reputation: 18092

How to downcase the first character of a string?

There is a function to capitalize a string, I would like to be able to change the first character of a string to be sure it will be lowercase.

How can I do that in Python?

Upvotes: 93

Views: 74819

Answers (9)

BaiJiFeiLong
BaiJiFeiLong

Reputation: 4609

pip install pydash first.

import pydash  # pip install pydash

assert pydash.lower_first("WriteLine") == "writeLine"

https://github.com/dgilland/pydash

https://pydash.readthedocs.io/en/latest/

https://pypi.org/project/pydash/

Upvotes: 0

Van Peer
Van Peer

Reputation: 2167

This duplicate post lead me here.

If you've a list of strings like the one shown below

l = ['SentMessage', 'DeliverySucceeded', 'DeliveryFailed']

Then, to convert the first letter of all items in the list, you can use

l = [x[0].lower() + x[1:] for x in l]

Output

['sentMessage', 'deliverySucceeded', 'deliveryFailed']

Upvotes: 0

martineau
martineau

Reputation: 123393

One-liner which handles empty strings and None:

func = lambda s: s[:1].lower() + s[1:] if s else ''

>>> func(None)
>>> ''
>>> func('')
>>> ''
>>> func('MARTINEAU')
>>> 'mARTINEAU'

Upvotes: 90

Don O'Donnell
Don O'Donnell

Reputation: 4728

No need to handle special cases (and I think the symmetry is more Pythonic):

def uncapitalize(s):
    return s[:1].lower() + s[1:].upper()

Upvotes: 8

Robert Rossney
Robert Rossney

Reputation: 96702

I'd write it this way:

def first_lower(s):
    if s == "":
        return s
    return s[0].lower() + s[1:]

This has the (relative) merit that it will throw an error if you inadvertently pass it something that isn't a string, like None or an empty list.

Upvotes: 0

Manoj Govindan
Manoj Govindan

Reputation: 74675

Simplest way:

>>> mystring = 'ABCDE'
>>> mystring[0].lower() + mystring[1:]
'aBCDE'
>>> 

Update

See this answer (by @RichieHindle) for a more foolproof solution, including handling empty strings. That answer doesn't handle None though, so here is my take:

>>> def first_lower(s):
   if not s: # Added to handle case where s == None
   return 
   else:
      return s[0].lower() + s[1:]

>>> first_lower(None)
>>> first_lower("HELLO")
'hELLO'
>>> first_lower("")
>>> 

Upvotes: 8

Adrian McCarthy
Adrian McCarthy

Reputation: 47956

Interestingly, none of these answers does exactly the opposite of capitalize(). For example, capitalize('abC') returns Abc rather than AbC. If you want the opposite of capitalize(), you need something like:

def uncapitalize(s):
  if len(s) > 0:
    s = s[0].lower() + s[1:].upper()
  return s

Upvotes: 10

JoshD
JoshD

Reputation: 12824

s = "Bobby tables"
s = s[0].lower() + s[1:]

Upvotes: 52

RichieHindle
RichieHindle

Reputation: 281345

def first_lower(s):
   if len(s) == 0:
      return s
   else:
      return s[0].lower() + s[1:]

print first_lower("HELLO")  # Prints "hELLO"
print first_lower("")       # Doesn't crash  :-)

Upvotes: 22

Related Questions