2017-09-23 229 views
0

我被困在一个问题,我需要一个函数,它需要两个参数,一个字符和一个包含列表的列表。然后该函数应该将该元素添加到列表中的所有列表。所以,如果我有争论"o"[['tesc'], ['fo'], [1]]输出应该是[['tesc', 'o'], ['fo', 'o'], [1, 'o']]如何将一个元素添加到列表中的每个列表中?

这里是我的代码,我怀疑我什么也没做正确的,因为我完全不

def distribute(e, l): 
    new_list = [] 
    for i in l: 
     new_list.append(i) 
    for e in new_list: 
     new_list.append(e) 
    print(new_list) 

得到任何输出什么我做错了吗?

回答

1

你可以试试这个:

def add_item(l, a): 
    return [i+[a] for i in l] 

print(add_item([['tesc'], ['fo'], [1]], "o")) 

输出:

[['tesc', 'o'], ['fo', 'o'], [1, 'o']] 
1

您在for-loop并作为functionparameter使用相同的变量名'e'。此外,在这第二个loop,你想要appendi,因为这些是子列表 - 不是appendnew_list

这就是为什么function无法完成,你是looping通过每个元素new_list,但增加了new_list像你那样做,因此永远不会结束。

最后,我想改变printreturn你正在编写一个function

def distribute(e, l): 
    new_list = [] 
    for i in l: 
     new_list.append(i) 
    for i in new_list: 
     i.append(e) 
    return new_list 

这将工作,但它是不是很pythonic。所有的第一个for-loop正在创建输入列表('l')的副本,这是必要的(在某些应用中),因为没有它,输入list将被修改为listsimmutable

但是,您只需将list复制到slice即可摆脱此loop。这将使你的功能更简洁:

def distribute(e, l): 
    new_list = l[:] 
    for i in new_list: 
     i.append(e) 
    return new_list 

和当然,如果你不介意解析为functionlist被修改,不能打扰使得它的一个副本:

def distribute(e, l): 
    for i in l: 
     i.append(e) 
    return l 
1

你正在做的事情太复杂:

def distribute(e, l): 
    for sublist in l: 
     sublist.append(e) 

    print(l) 

distribute("o", [['tesc'], ['fo'], [1]]) 

输出:

[['tesc', 'o'], ['fo', 'o'], [1, 'o']] 
相关问题