how to edit each member of a list in python

2020-05-02 02:53发布

问题:

I am new to python and I am trying to create a capitalize function that either capitalizes all words in a string or only the first word. Here is my function

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

So basically, I want to edit the item but I don't know how I can do it.

Btw, this is an optional question: in c# I had the chance to debug my code, what do yo guys use in python to debug?

回答1:

Use a list comprehension:

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

what do yo guys use in python to debug?

print statements for complicated pieces of code, the interactive interpreter for anything else. I write a lot of tests through, and run them with nose.



回答2:

The bread-and-butter way to do this is to use a list comprehension:

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

This creates a copy of the list, with the expression applied to each of the items.

If you don't want to create a copy, you could do this...

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

...or this:

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

The latter is probably the most elegant way to alter the list in-place, but note that it uses more temporary storage then the enumerate method.