我想通过在每个项目后面加上'Great'来覆盖'魔术师'列表。 如果我使用pop()将新项目分配给新列表,将旧项目分配为空,并通过向其追加新名称,它就可以工作。
码
for great in greatlist:
mages.append(great)
但为什么不把它复制到工作上呢?结果是一个空的'法师'列表。
mages=greatlist[:]
这里是整个代码:
magicians=['feka','kuka','szuka']
#puts 'the Great' after every list element name
def make_great(mages):
greatlist=[]
while mages:
uj=mages.pop()
greatlist.append(uj + ", the Great")
# for great in greatlist:
# mages.append(great)
mages=greatlist[:]
答案 0 :(得分:1)
问题是您正在尝试重新分配mages
。这在python中是错误的,因为变量不是容器,但你必须将它们视为标签:
magicians=['feka','kuka','szuka']
#puts 'the Great' after every list element name
def make_great(mages):
greatlist=[]
while mages:
uj=mages.pop()
greatlist.append(uj + ", the Great")
return greatlist # return the resulting list
magicians = make_great(magicians) #reassign magicians labelling to the new list from function
注意范围greatlist
存在于函数内部,因此一旦函数完成,所有非全局函数或返回的函数都将被解除。
答案 1 :(得分:1)
你可以试试这个,
In [22]: magicians=['feka','kuka','szuka']
In [23]: def make_great(mages):
...: mages = ['{}, the Great'.format(i) for i in mages]
....:. return mages
...:
In [25]: magicians = make_great(magicians)
# ['feka, the Great', 'kuka, the Great', 'szuka, the Great']
答案 2 :(得分:0)
或者您也可以使用list()
功能
mages = list(greatlist)
这会将greatlist
的副本放入mages
答案 3 :(得分:0)
请改用:
magicians=['feka','kuka','szuka']
st = "the Great"
a = [(x+" "+y) for x,y in zip(magicians,[st]*len(magicians))]
print(a)
答案 4 :(得分:0)
类似于Netwaves的评论,'mages'是一个函数参数。因此它是函数的本地函数,并在函数结束时消失。
所以你需要在函数中返回它并将其捕获到函数之外。
答案 5 :(得分:0)
你可以按照以下方式使用列表理解来让魔术师再次出色!
magicians=['feka','kuka','szuka']
#puts 'the Great' after every list element name
def make_great(mages):
return [each_item +" the Great" for each_item in mages]
print make_great(magicians)
<强>输出:强>
['feka the Great', 'kuka the Great', 'szuka the Great']
答案 6 :(得分:0)
由于您要修改输入列表,我们可以直接修改元素:
magicians=['feka','kuka','szuka']
def make_great(mages):
for i, name in enumerate(mages):
mages[i] = name + " the Great"
return mages