def make_list_of_lists(n):
the_list = []
sublist = []
for i in range(n):
print(sublist)
the_list.extend(sublist)
sublist = sublist.insert(len(sublist), i+1)
return the_list
我收到此函数的错误消息,即:
'NoneType'对象不可迭代'
我不明白为什么会这样?
答案 0 :(得分:4)
看这行:
sublist = sublist.insert(len(sublist), i+1)
insert
函数确实会插入并返回None
,所以在这里进行下一次迭代
the_list.extend(sublist)
sublist
是None
,而extend
函数需要可迭代的参数。固定代码:
def make_list_of_lists(n):
the_list = []
sublist = []
for i in range(n):
print(sublist)
the_list.extend(sublist)
sublist.insert(len(sublist), i + 1)
return the_list
make_list_of_lists(3)
[]
[1]
[1,2]
[1、1、2]
答案 1 :(得分:0)
insert
操作就地修改了对象,就像几乎所有这些方法一样,它返回None
是因为不需要返回值。经过1次迭代后,它尝试执行以下操作,该操作要求遍历None
以添加其所有元素,而您不能
the_list.extend(None)
就是这样
sublist.insert(len(sublist), i + 1)
答案 2 :(得分:0)
sublist = sublist.insert(len(sublist), i+1)
这使子列表为空。那是问题。
答案 3 :(得分:0)
如其他答案所述,是导致问题的sublist = sublist.insert(len(sublist), i+1)
行。
但是,您似乎想创建一个列表列表(基于函数名称),而您的代码当前不这样做。
def make_list_of_lists(n):
the_list = []
sublist = []
for i in range(n):
the_list.append(sublist)
return the_list
print(make_list_of_lists(5))
这将打印出一个包含5个空列表的空列表:
[[], [], [], [], []]