我遇到了一个问题,我需要一个带两个参数的函数,一个字符和一个包含列表的列表。然后该函数将该元素添加到列表中的所有列表中。因此,如果我有参数"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)
我做错了什么?
答案 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
中,您希望append
到i
,因为这些是子列表 - 而不是append
到new_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']]