AttributeError: объект 'str' не имеет атрибута 'append'

>>> myList[1]
'from form'
>>> myList[1].append(s)

Traceback (most recent call last):
  File "<pyshell#144>", line 1, in <module>
    myList[1].append(s)
AttributeError: 'str' object has no attribute 'append'
>>>

Почему myList[1] считается объектом 'str'? mList[1] возвращает первый элемент в списке 'from form', но я не могу добавить к элементу 1 в списке myList. Спасибо.

Edit01:

@pyfunc: Спасибо за объяснение; теперь я понимаю.

Мне нужно иметь список списков; поэтому "из формы" должен быть список. Я сделал это (пожалуйста, исправьте, если это не так):

>>> myList
[1, 'from form', [1, 2, 't']]
>>> s = myList[1]
>>> s
'from form'
>>> s = [myList[1]]
>>> s
['from form']
>>> myList[1] = s
>>> myList
[1, ['from form'], [1, 2, 't']]
>>> 

Ответы

Ответ 1

myList [1] - это элемент myList, и это тип string.

myList [1] - str, вы не можете добавить к нему. myList - это список, который вы должны были добавить к нему.

>>> myList = [1, 'from form', [1,2]]
>>> myList[1]
'from form'
>>> myList[2]
[1, 2]
>>> myList[2].append('t')
>>> myList
[1, 'from form', [1, 2, 't']]
>>> myList[1].append('t')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'append'
>>> 

Ответ 2

Если вы хотите добавить значение в myList, используйте myList.append(s).

Строки неизменяемы - вы не можете добавлять к ним.

Ответ 3

Почему myList [1] считается объектом 'str'?

Потому что это строка. Что еще есть 'from form', если не строка? (На самом деле, строки также являются последовательностями, то есть они могут быть проиндексированы, нарезаны, повторены и т.д., А также - но эта часть класса str и не делает его списком или чем-то еще).

mList[1] возвращает первый элемент в списке 'from form'

Если вы имеете в виду, что myList есть 'from form', нет, это не так!!! второй (индексирование начинается с 0) элемент - 'from form'. Это БОЛЬШАЯ разница. Это разница между домом и человеком.

Кроме того, myList не должен быть list из вашего примера с коротким кодом - это может быть все, что принимает 1 как index - a dict с 1 как индекс, список, кортеж, большинство другие последовательности и т.д. Но это не имеет значения.

но я не могу добавить к элементу 1 в списке myList

Конечно, нет, потому что это строка, и вы не можете присоединить ее к строке. Строка неизменна. Вы можете объединить (как в строках "новый объект, состоящий из этих двух" ). Но вы не можете append (как в, "этот конкретный объект теперь имеет это в конце" ).

Ответ 4

То, что вы пытаетесь сделать, это добавить дополнительную информацию к каждому элементу в списке, который вы уже создали, поэтому

    alist[ 'from form', 'stuff 2', 'stuff 3']

    for j in range( 0,len[alist]):
        temp= []
        temp.append(alist[j]) # alist[0] is 'from form' 
        temp.append('t') # slot for first piece of data 't'
        temp.append('-') # slot for second piece of data

    blist.append(temp)      # will be alist with 2 additional fields for extra stuff assocated with each item in alist  

Ответ 5

Это простая программа, показывающая добавление ('t') в список.
п = [ 'е', 'G', 'ч', 'я', 'к']

for i in range(1):
    temp=[]
    temp.append(n[-2:])
    temp.append('t')
    print(temp)

Вывод: [['i', 'k'], 't']