我不理解错误消息“ NoneType”对象在python中无法迭代

时间:2019-11-10 10:03:30

标签: python list typeerror

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'对象不可迭代'

我不明白为什么会这样?

4 个答案:

答案 0 :(得分:4)

看这行:

sublist = sublist.insert(len(sublist), i+1)

insert函数确实会插入并返回None,所以在这里进行下一次迭代

the_list.extend(sublist)

sublistNone,而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个空列表的空列表:

[[], [], [], [], []]