Я не понимаю, сообщение об ошибке «NoneType» объект не повторяется в Python - PullRequest
0 голосов
/ 10 ноября 2019
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 ]

4 голосов
/ 10 ноября 2019

Посмотрите на эту строку:

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

insert функция вставляется на место и возвращает None, поэтому на следующей итерации здесь

the_list.extend(sublist)

sublist is 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]

0 голосов
/ 10 ноября 2019

Как отмечалось в других ответах, проблема возникает из-за строки 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 пустых списков:

[[], [], [], [], []]
0 голосов
/ 10 ноября 2019
sublist = sublist.insert(len(sublist), i+1)

Это делает список не равным. В этом проблема.

0 голосов
/ 10 ноября 2019

Операция insert, изменяющая объект на месте, и, как почти все подобные методы, возвращает None, потому что вам не нужно возвращаемое значение. После 1 итерации он попытался сделать следующее, которое требует итерации по None для добавления всех его элементов, и вы не можете

the_list.extend(None)

Так что просто сделайте

sublist.insert(len(sublist), i + 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...