Python复制函数中的列表

时间:2018-02-16 10:11:05

标签: python

我想通过在每个项目后面加上'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[:]

7 个答案:

答案 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