如何在Python中编辑列表的每个成员

0 投票
2 回答
1920 浏览
提问于 2025-04-16 22:28

我刚开始学习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

最常见的方法是使用列表推导式:

>>> 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

使用列表推导式:

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来运行这些测试。

撰写回答