我正在阅读Eric Matthes的Python速成教程,我被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[:])发布于 2019-07-30 03:06:51
列表是可变的,也就是说它们是可以修改的。因此,返回修改后的列表,并将其保存在变量名- magician_names1下
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)发布于 2019-07-30 03:23:04
您当前的函数会修改您传递给它的列表。这意味着如果您调用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"https://stackoverflow.com/questions/57259854
复制相似问题