首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python速成班练习8-11

Python速成班练习8-11
EN

Stack Overflow用户
提问于 2019-07-30 02:52:07
回答 2查看 253关注 0票数 0

我正在阅读Eric Matthes的Python速成教程,我被8-11卡住了。我不太明白如何返回新列表并将其存储在单独的列表中。

到目前为止,我已经尝试通过复制列表来调用该函数。

代码语言:javascript
运行
复制
def make_great(magicians):
    """This function adds the 'The Great' in front of a magicians name"""
    great_magicians = [] #A new list to hold names of new magicians


    while magicians: #This while loop runs while the parameter 'magicians' has elements in it
        magician = magicians.pop() #Element from magicians parameter held in magician varibale 
        great_magician = magician + " the Great" #Creating a new element to store great_magician
        great_magicians.append(great_magician) #Adding great_magicians to empty list


    for great_magician in great_magicians: #Adding elements in great_magician back into magicians
        magicians.append(great_magician)





magician_names1 = ['inho','mumbo jumbo','trick shotta','hwolla']


make_great(magician_names1[:])
EN

回答 2

Stack Overflow用户

发布于 2019-07-30 03:06:51

列表是可变的,也就是说它们是可以修改的。因此,返回修改后的列表,并将其保存在变量名- magician_names1下

代码语言:javascript
运行
复制
def make_great(magicians):
    """This function adds the 'The Great' in front of a magicians name"""
    great_magicians = [] #A new list to hold names of new magicians


    while magicians: #This while loop runs while the parameter 'magicians' has elements in it
        magician = magicians.pop() #Element from magicians parameter held in magician varibale 
        great_magician = magician + " the Great" #Creating a new element to store great_magician
        great_magicians.append(great_magician) #Adding great_magicians to empty list


    for great_magician in great_magicians: #Adding elements in great_magician back into magicians
        magicians.append(great_magician)

    return magicians





magician_names1 = ['inho','mumbo jumbo','trick shotta','hwolla']


magician_names1 = make_great(magician_names1[:])
print(magician_names1)
票数 0
EN

Stack Overflow用户

发布于 2019-07-30 03:23:04

您当前的函数会修改您传递给它的列表。这意味着如果您调用make_great(magician_names1),它将修改您的主列表中的名称,您将无法再访问原始值。

如果您想要在新列表中进行更改,您可以采用两种常规方法。第一种方法是更改函数,使其创建并返回一个新列表,而不修改传递给它的列表。这很简单:

代码语言:javascript
运行
复制
def make_great(magicians):
    return [magician + " the Great" for magician in magicians]
    # or:
    # results = []
    # for magician in magicians:
    # results.append(magician + " the Great")
    # return results

当您调用它时,您可以将返回的列表赋给一个新变量,而旧的列表将保持不变:great_names = make_great(magician_names1)

另一种选择是让当前函数保持不变,因为您有时可能希望在适当的位置进行修改。在您不想要的情况下,您可以首先创建一个副本,然后在适当的位置修改副本:

代码语言:javascript
运行
复制
great_names = magician_names1[:]    # make a copy and give it a name
make_great(great_names)             # then modify the copied list in place

我要指出的是,虽然您当前的代码确实适用于就地修改,但它比需要的复杂得多(它还颠倒了名称在列表中出现的顺序,这可能是一个不受欢迎的副作用)。您可以使用enumerate内置函数编写一个简单得多的版本,以便在遍历包含名称的列表时获得名称的索引:

代码语言:javascript
运行
复制
def make_great(magicians):
    for i, name in enumerate(magicians):
        magicians[i] = name + " the Great"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57259854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档