Как заглушить первый символ строки? - PullRequest
54 голосов
/ 01 октября 2010

Есть функция для прописной строки, я хотел бы иметь возможность изменить первый символ строки, чтобы быть уверенным, что она будет строчной.

Как я могу это сделать в Python?

Ответы [ 8 ]

56 голосов
/ 03 октября 2010

Однострочник, который обрабатывает пустые строки и None:

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

>>> func(None)
>>> ''
>>> func('')
>>> ''
>>> func('MARTINEAU')
>>> 'mARTINEAU'
26 голосов
/ 01 октября 2010
s = "Bobby tables"
s = s[0].lower() + s[1:]
19 голосов
/ 01 октября 2010
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  :-)
8 голосов
/ 01 октября 2010

Интересно, что ни один из этих ответов не делает точно противоположность capitalize(). Например, capitalize('abC') возвращает Abc вместо AbC. Если вы хотите противоположность capitalize(), вам нужно что-то вроде:

def uncapitalize(s):
  if len(s) > 0:
    s = s[0].lower() + s[1:].upper()
  return s
7 голосов
/ 01 октября 2010

Самый простой способ:

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

Обновление

См. этот ответ (автор @RichieHindle) для более надежного решения, включая обработкупустые строки.Этот ответ не обрабатывает None, поэтому вот мое мнение:

>>> 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("")
>>> 
4 голосов
/ 02 октября 2010

Нет необходимости обрабатывать особые случаи (и я думаю, что симметрия более Pythonic):

def uncapitalize(s):
    return s[:1].lower() + s[1:].upper()
0 голосов
/ 13 ноября 2017

Этот дубликат пост приведет меня сюда.

Если у вас есть список строк, подобный показанному ниже

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

Затем, чтобы преобразовать первую букву всех элементов в списке, вы можете использовать

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

Выход

['sentMessage', 'deliverySucceeded', 'deliveryFailed']
0 голосов
/ 02 октября 2010

Я бы написал так:

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

У этого (относительного) достоинства будет то, что он выдаст ошибку, если вы случайно передадите ему что-то, что не является строкой, например None или пустой список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...