如何在列表列表中的每个列表中添加元素?

时间:2017-09-23 15:22:19

标签: python

我遇到了一个问题,我需要一个带两个参数的函数,一个字符和一个包含列表的列表。然后该函数将该元素添加到列表中的所有列表中。因此,如果我有参数"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)

我做错了什么?

3 个答案:

答案 0 :(得分: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 :(得分:1)

您在'e'for-loop function中使用了相同的变量名称parameter。另外,在第二个loop中,您希望appendi,因为这些是子列表 - 而不是appendnew_list

这就是为什么function永远不会通过looping中的每个元素new_list完成,而是添加到new_list,因此它永远不会结束。

最后,在您撰写print时,我会将return更改为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将被修改为{{1}是lists

但是,只需将immutable复制为loop即可完全摆脱此list。这将使您的功能更简洁:

slice

当然,如果您不关心解析为def distribute(e, l): new_list = l[:] for i in new_list: i.append(e) return new_list 的{​​{1}}是否被修改,那么您就无法复制它了:

list

答案 2 :(得分: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']]