Python速成课程练习8-11

时间:2019-07-29 18:52:06

标签: python-3.x function

我正在研究Eric Matthes撰写的Python Crash Course书,而我仍然坚持8-11。我不太了解如何返回新列表并将其存储在单独的列表中。

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

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[:])

2 个答案:

答案 0 :(得分:0)

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

的变量名下
C:\Users\MyUsername\Desktop\test>live-server

答案 1 :(得分:0)

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

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

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)

另一种选择是保留当前功能,因为有时您可能想要进行适当的修改。如果您不希望这样做,可以先制作副本,然后就地修改副本:

great_names = magician_names1[:]    # make a copy and give it a name
make_great(great_names)             # then modify the copied list in place

我会注意到,虽然您当前的代码可以用于就地修改,但它比所需的要复杂得多(它也颠倒了名称在列表中出现的顺序,这可能是不希望的副作用)。您可以使用enumerate内置函数编写一个简单得多的版本,以在遍历包含在其中的列表时获取名称的索引:

def make_great(magicians):
    for i, name in enumerate(magicians):
        magicians[i] = name + " the Great"