Я пытаюсь добавить int к list в цикле . Код ниже работает хорошо:

p = []
p.append(3)

Но когда я запускаю этот код:

p = [] 
for x in range(24):
    p = p.append(3)
    print(p)

Я сталкиваюсь с ошибкой:

AttributeError: 'NoneType' object has no attribute 'append'

Между тем, я ожидаю, что список длиной 24.

Итак, почему я не могу добавить 3s в список?

-2
Jeff 3 Июл 2019 в 22:32

3 ответа

Лучший ответ

append не возвращает list, он изменяет состояние списка, в котором он вызывается. Поэтому, когда вы присваиваете p = p.append(3), вы присваиваете p значение None, и, следовательно, вы получаете ошибку, которую вы указали.

Чтобы это исправить, просто исключите присвоение в цикле.

p = [] 
for x in range(24):
    p.append(3)
    print(p)
2
Jon Kiparsky 3 Июл 2019 в 19:37

Что бы это ни стоило, вы также можете сделать это без использования полного цикла и append ing:

Умножение списка [3] на 24:

[3] * 24

Понимание списка:

[3 for _ in range(24)]

Или быть необычным itertools.repeat:

repeat(3, 24)

Или используя NumPy:

np.full(24, 3)

Увидеть ниже:

>>> p = [] 
>>> for x in range(24):
...     p.append(3)
>>> p
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
>>> [3]*24
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
>>> [3 for _ in range(24)]
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
>>> list(repeat(3, 24))
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
>>> list(np.full(24, 3))
[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
1
Jab 3 Июл 2019 в 20:02

не назначать. Просто используйте метод append. Если вы назначите, p станет None.

Использовать это:

p = [] 
for x in range(24):
    p.append(3)
    print(p)
1
makis 3 Июл 2019 в 19:40