У меня есть пустой list с именем mylist, который выглядит так:
[None,None,None,None,None,None,None]
У меня есть цикл for, который будет добавлять один элемент к каждому элементу каждый раз, когда он заканчивается.
Я пытаюсь добавить 1 к элементу, используя:
mylist[i] = mylist[i]+1
но я получаю сообщение об ошибке:
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
Количество раз, когда список повторяется по изменениям, поэтому нельзя просто добавить один ко всем элементам.
Код, который я использую:
for j in range(0,bucketSize):
for i in range (0,minibuckets):
list[i] = list[i]+1
Вы можете использовать False вместо None: False + 1 -> 1






Вы должны инициализировать свой список как [0, 0, 0, 0, 0, 0, 0], потому что вы не можете сделать None + 1. На самом деле не имеет смысла пытаться добавить 1 к чему-то, что фактически ничего не значит. None — это совсем другое понятие, чем 0.
Например:
mylist = [0] * 7
# or
mylist = [0 for i in range(7)]
В качестве альтернативы вы можете проверить None во внутреннем цикле for:
if mylist[i] is None:
mylist[i] = 1
else:
mylist[i] += 1
Или та же проверка в одну строку:
mylist[i] = mylist[i] + 1 is mylist[i] is not None else 1
None сильно отличается от 0. По сути, это не имеет никакой ценности.
Простое решение — просто проверить наличие None в цикле.
for j in range(0,bucketSize):
for i in range (0,minibuckets):
if list[i] is None:
list[i] = 1
else:
list[i] = list[i]+1
В качестве альтернативы инициализируйте свой список 0 или замените None на 0 перед запуском.
Вы можете сделать что-то вроде этого, если вы не можете изменить None на 0:
mylist[i] = mylist[i]+1 if mylist[i] else 1
Используйте простое понимание списка:
my_list = [None,None,None,None,None,None,None]
print(['1' if v is None else v for v in my_list])
Выходы:
['1', '1', '1', '1', '1', '1', '1']
Разве этот цикл
forне означает просто:mylist[:miniBuckets] = [el or 0 + bucketSize for el in mylist[:miniBuckets]]? Если только я что-то не упустил...