как редактировать каждого члена списка в Python - PullRequest
0 голосов
/ 29 июля 2011

Я новичок в python и пытаюсь создать функцию с заглавной буквы, которая использует заглавные буквы в строке или только в первом слове. Вот моя функция

def capitalize(data, applyToAll=False):
    """depending on applyToAll it either capitalizes
       all the words in the string or the first word of a string"""

    if(type(data).__name__ == "str"):

        wordList = data.split()

        if(applyToAll == True):

            for word in wordList:
                wordList[word] = word.capitalize() #here I am stuck!

            return " ".join(wordList)

        else: return data.capitalize()

    else: return data

Итак, я хочу отредактировать элемент, но не знаю, как это сделать.

Кстати, это дополнительный вопрос: в c # у меня была возможность отладить мой код, что вы, ребята, используете в python для отладки?

Ответы [ 2 ]

5 голосов
/ 29 июля 2011

Простой способ сделать это - использовать понимание списка:

>>> l = ['one', 'two', 'three']
>>> [w.capitalize() for w in l]
['One', 'Two', 'Three']

Это создает копию списка с выражением, применяемым к каждому из элементов.

Если вы не хотите создавать копию, вы можете сделать это ...

>>> for i, w in enumerate(l):
...     l[i] = w.capitalize()
... 
>>> l
['One', 'Two', 'Three']

... или это:

l[:] = (w.capitalize() for w in l)

ПоследнийВероятно, это самый элегантный способ изменить список на месте, но учтите, что он использует больше временного хранилища, чем метод enumerate.

3 голосов
/ 29 июля 2011

Использовать понимание списка:

def capitalize(s, applyToAll=False):
    if applyToAll:
        l = [w.capitalize() for w in s.split()]
        return " ".join(l)
    else:
        return s.capitalize()

что вы, ребята, используете в python для отладки?

print операторы для сложных частей кода, интерактивный интерпретатор для всего остального. Я пишу множество тестов и запускаю их с nose .

...