如何使用Len()函数返回列表中每个元素的长度?

时间:2013-09-29 15:46:07

标签: python string-length

问题:

  

编写一个遍历的循环:

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

并打印每个元素的长度。

我尝试过我的解决方案:

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()

5 个答案:

答案 0 :(得分: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"

答案 1 :(得分:1)

首先,使用该元素变量作为访问列表项的索引是多余的。在python中编写for循环时,您将迭代列表中的每个项目,以便在迭代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))

答案 2 :(得分:0)

唯一可行的解​​决方案是将int类型更改为str,反之亦然。 如果它只是一个练习,那应该不是问题。

答案 3 :(得分:0)

我在考虑您的问题,我认为您可能对我来说是Python的新手,对我而言,一切都在R中解决了。我发现的解决方案是将列表中的所有元素设置为一个列表。 'element',因此最后一个代码可以在列表中的所有列表上运行:

for k in range(len(items)):
    if type(items[k])!= list:
       items[k]=[items[k]]
items

[len(i) for i in items]
>>[1, 1, 3, 3]

答案 4 :(得分:0)

可以使用map和__ len __检查使用len()时是否会引发错误,例如

myList = ['spam!', 1,['Brie', 'Roquefort', 'Pol le Veq'], [1,2,3]]
myList_filter = list(filter(lambda x: hasattr(x, "__len__"), myList))
myList_len = list(map(len, myList_filter)) 
print(myList_len) # [5, 1, 3, 3]

error_type = [entry for entry in myList if entry not in myList_filter]
print("{0} has no defined length".format(error_type)) # [1] has no defined length