AttributeError: атрибут объекта ‘list’ ‘append’ доступен только для чтения

#python #python-3.x #append #error-list

#python #python-3.x #добавить #ошибка-список

Вопрос:

Я новичок в этом мире, и я начинаю делать свои первые шаги в python. Я пытаюсь извлечь в один список индексы определенных значений моего списка (те, которые больше 10). При использовании append я получаю следующую ошибку и не понимаю, в чем ошибка.

 dbs = [0, 1, 0, 0, 0, 0, 1, 0, 1, 23, 1, 0, 1, 1, 0, 0, 0, 
       1, 1, 0, 20, 1, 1, 15, 1, 0, 0, 0, 40, 15, 0, 0]

exceed2 = []

for d, i in enumerate(dbs):
    if i > 10:
        exceed2.append= (d,i)
        print(exceed2)
 

Комментарии:

1. Вам не нужно использовать a = для вызова append .

2. .append() принимает только одно значение. Смотрите этот учебник .

3. Кроме того, append принимает только один аргумент. Если вы пытаетесь добавить кортеж, вам нужно написать `exceed2.append((d, i)).

Ответ №1:

Вы, вероятно, имеете в виду написать

 for i, d in enumerate(dbs):
    if d > 10:
        exceed2.append(i)
print(exceed2)
 

Здесь несколько исправлений:

  • append=() недопустимый синтаксис, вы должны просто написать append()
  • i, d значения из enumerate() возвращают значения и индексы. Вы должны проверять d > 10 , поскольку это значение (согласно вашему описанию задачи). Тогда вы должны помещать только i в exceed2 массив. (Я переключаю переменные i and d так, i index чтобы это было более обычным)
  • append(d,i) все равно не сработает, поскольку append принимает один аргумент. Если вы хотите добавить как значение, так и индекс, вам следует использовать .append((d, i)) , который добавит кортеж обоих в список.
  • вероятно, вы не хотите печатать exceed2 каждый раз при выполнении условия, когда вы могли бы просто распечатать его один раз в конце.

Комментарии:

1. Чтобы быть педантичным, синтаксис не является недопустимым, поэтому вы получаете ошибку времени выполнения. Если бы у вас был другой объект, например class Foo: pass , тогда foo = Foo() вы могли бы все сделать foo.append = (d, i) просто отлично, это присвоило бы кортеж .append атрибуту. Но list объекты этого не допускают

2. Это должно быть if i > 10 , d будет иметь значение index not.

3. о, правда, я просто копировал из OP, не задумываясь.

4. @AlexKritchevsky Затем, пожалуйста, отредактируйте свой ответ.

5. Я уже это сделал. Я переключил i d переменные и, чтобы иметь смысл.

Ответ №2:

Добро пожаловать в этот мир: D

проблема в том, что .append на самом деле является функцией, которая принимает только один ввод и добавляет этот ввод в самый конец любого списка, который вы предоставляете.

Попробуйте это вместо:

 dbs = [0, 1, 0, 0, 0, 0, 1, 0, 1, 23, 1, 0, 1, 1, 0, 0, 0,
       1, 1, 0, 20, 1, 1, 15, 1, 0, 0, 0, 40, 15, 0, 0]

exceed2 = []

for d, i in enumerate(dbs):
    if i > 10:
        exceed2.append(i)
        print(exceed2)