我正在研究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[:])
答案 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"