Py学习  »  Python

我不明白错误消息“NoneType”对象在python中不可iterable

Jayyyyyy • 4 年前 • 1445 次点击  
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

我不明白为什么会这样?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/53515
 
1445 次点击  
文章 [ 4 ]  |  最新文章 4 年前
Chris
Reply   •   1 楼
Chris    4 年前

如其他答案所述,它是 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))

[[], [], [], [], []]
Xuyi Wang
Reply   •   2 楼
Xuyi Wang    4 年前
sublist = sublist.insert(len(sublist), i+1)

这使得子列表为“无”。这就是问题所在。

azro
Reply   •   3 楼
azro    4 年前

这个 insert 操作就地修改对象,并像几乎所有这些类型的方法一样返回 None 添加它的所有元素,而您不能

the_list.extend(None)

所以就这么做吧

sublist.insert(len(sublist), i + 1)
ingvar
Reply   •   4 楼
ingvar    4 年前

看这一行:

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

insert None ,所以在下面的迭代中

the_list.extend(sublist)

sublist 虽然 extend 函数需要iterable参数。固定代码:

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,2]