2014-01-14 3 views
-1

Я действительно новичок в python, и все, что я хочу, это удалить некоторые объекты из списка. В основном архитектура списка такова: для каждого объекта списка есть 5 пользовательских объектов класса внутри (?), Поэтому индексирование похоже на список [0] [0] и т. Д. Однако я могу только опционально удалить что-то вроде списка [0 ], взяв с собой все объекты. Это я просто играю с ним в командной строке:Как удалить пользовательский объект класса из списка в python?

>>> list.pop()[0][1] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'nameless_class_to_protect_identity' object does not support indexing 

Таким образом, похоже, что это как-то связано с самими пользовательскими объектами. Я сам не определял этот класс, поэтому я не знаю, что происходит. Как я могу просто определить что-то в определении класса, чтобы я мог удалить отдельные объекты ???

+3

Эту вы уже удаляете. Это не исключение. –

+1

pop возвращает всплывающий элемент, поэтому вы не можете делать то, что вы пытаетесь. – Mattias

ответ

2

То, что возвращается pop, является фактическим элементом списка ", который не поддерживает индексирование" (короче, возвращаемый элемент не является списком (на самом деле к нему можно обращаться таким образом, но это уже другая история)) , Отсюда исключение.

, что вы можете сделать, это:

mylist.pop(index) # this will remove the element at index-th position 

пример

>>> mylist = [1, 2, 3, 4] 
>>> mylist.pop(1) # this will remove the element 2 of the list and return it 
2 # returned element of the list 
>>> print mylist 
[1, 3, 4] 

если вы не заинтересованы в получении элемент удален, вы можете просто использовать дель (при условии, что существует индекс):

del mylist[index] 

пример

>>> mylist = [1, 2, 3, 4] 
>>> del mylist[2] 
>>> print mylist 
[1, 2, 4] 

В случае вложенных списков:

>>> mylist = [[1, 2], ['a', 'b', 'c'], 5] 
>>> mylist[0].pop(1) # we pop the 2 element (element at index 1) of the list at index 0 of mylist 
2 
>>> print mylist 
[[1], ['a', 'b', 'c'], 5] 
>>> mylist.pop(1)[1] # here we pop (remove) the element at index 1 (which is a list) and get the element 1 of that returned list 
'b' 
>>> print mylist # mylist now possess only 2 elements 
[[1], 5] 

На несвязанной ноте я назвал список переменных mylist вместо того list, чтобы не переопределить list встроенного типа.

+0

Вы должны добавить пример для вложенных списков, поскольку это, по-видимому, его фактический прецедент; например 'mylist [0] .pop (1)' – l4mpi

+0

Отлично, спасибо вам большое! Я знал, что должно быть простое решение, но мне было так трудно найти его. – isilya

Смежные вопросы