2013-09-29 1 views
-1

Проблема:Как вернуть длину каждого элемента в списке с помощью функции Len()?

Write a loop that traverses:

['spam!', 1, ['Brie', 'Roquefort', 'Pol le Veq'], [1, 2, 3]] 

and prints the length of each element.

Я пытался, как мое решение:

list = ['spam!', 1,['Brie', 'Roquefort', 'Pol le Veq'], [1,2,3]] 
element = 0 

for i in list: 
    print len(list[element]) 
    element += 1 

Но он получает эту ошибку: TypeError: object of type 'int' has no len()

+0

Какой должна быть длина '1'? А что насчет '1323'? Каков ваш ожидаемый результат для вашего текущего ввода? –

+1

Не используйте 'list' как имя переменной, иначе вы можете столкнуться с большим количеством ошибок. –

ответ

1

Как уже отмечалось, номер 1 (второй ввод главный список) не имеет определенной длины. Но вы все еще можете поймать исключение и распечатать что-нибудь, если что-то вроде этого, например.

myList = ['spam!', 1,['Brie', 'Roquefort', 'Pol le Veq'], [1,2,3]] 

for entry in myList: 
    try: 
     l = len(entry) 
     print "Length of", entry, "is", l 
    except: 
     print "Element", entry, "has no defined length" 
0

Прежде всего, использование этой переменной элемента как индекса для доступа к вашим элементам списка является излишним. При написании для цикла в питоне, вы перебор каждого элемента в списке, например, что на итерацию 1:

for item in [1, [1,2,3]]: 
    # item = 1 
    ... 

А на следующей итерации: для пункта в [1, [1,2,3 ]]: # item = [1, 2, 3] ...

Следующая проблема заключается в том, что у вас есть элемент в этом списке без определенной длины. Я не знаю, что вы хотите сделать с этим, но возможно решения это, который будет печатать длину элемента (в цифрах), если элемент представляет собой целое число:

items = ['spam!', 1,['Brie', 'Roquefort', 'Pol le Veq'], [1,2,3]] 

for item in items: 
    if isinstance(item, int): 
     print(len(str(item))) 
    else: 
     print(len(item)) 
0

только возможным решением является изменение типа int на str и наоборот. Если это упражнение, это не должно быть проблемой.