问题:
编写一个遍历的循环:
['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()
答案 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