2013-03-28 2 views
1

моя программа вызывает len (список), и мое определение для len выглядит следующим образом.длина имплантации для дважды связанного списка, python

def __len__(self): 
    if not self.head: 
     return '[]' 
    else: 
     return self.size 

это ошибка, я получаю

assert len(testList) == 0, "List should be empty, but length is %r" % len(testList) 
TypeError: __len__() should return an int 

Поэтому в основном я должен вернуться «[]», когда список пуст, в противном случае я должен вернуть его длину. Как бы я это сделал.

+0

Возврат '' [] "' для длины пустого списка кажется, что вы неправильно читаете требования. Почему бы не вернуть 0? –

ответ

4

Возвращаемое значение __len__должно быть должно быть int. Поэтому верните 0, когда список пуст.


От docs:

object.__len__(self) 

Вызывается реализовать встроенную функцию LEN(). Должен возвращать длину объекта, целое число> = 0. Кроме того, объект, который не , определяет метод __nonzero__() и метод __len__() возвращает ноль считается ложным в булевом контексте.

+1

Для согласованности я бы сделал свой код, чтобы иметь 'self.size = 0', когда' not self.head' и просто возвращает 'self.size' в __len__. – khachik

1

__len__ должен возвращать int> = 0. См docs
Вот что говорит об ошибке.

Вы возвращаете строку ('[]'), которая не является int и поэтому эта ошибка возникает.
Возврат 0 будет более уместным.

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