如何找到多维列表的长度?
我自己想出了一个方法,但这是在多维列表中找到值的唯一方法吗?
multilist = [['1', '2', 'Ham', '4'], ['5', 'ABCD', 'Foo'], ['Bar', 'Lu', 'Shou']]
counter = 0
for minilist in multilist:
for value in minilist:
counter += 1
print(counter)
我很确定有一种更简单的方法来查找多维列表的长度,但是len(list)不起作用,因为它只给出了列表中的列表数量。有没有比这更有效的方法?
答案 0 :(得分:9)
怎么样:
sum(len(x) for x in multilist)
答案 1 :(得分:4)
替代@ mgilson的解决方案
sum(map(len, multilist))
答案 2 :(得分:1)
如果你想要任何n维列表中的项目数,那么你需要使用这样的递归函数:
def List_Amount(List):
return _List_Amount(List)
def _List_Amount(List):
counter = 0
if isinstance(List, list):
for l in List:
c = _List_Amount(l)
counter+=c
return counter
else:
return 1
无论列表的形状或大小如何,这都将返回列表中的项目数
答案 3 :(得分:0)
另一种选择(就是这个或观看错过的数学讲座......)
def getLength(element):
if isinstance(element, list):
return sum([getLength(i) for i in element])
return 1
这允许不同程度的'多维度'(如果这是一个单词)共存。
例如:
>>> getLength([[1,2],3,4])
4
或者,允许不同的集合类型
def getLength(element):
try:
element.__iter__
return sum([getLength(i) for i in element])
except:
return 1
例如:
>>> getLength([ 1, 2, (1,3,4), {4:3} ])
6
>>> getLength(["cat","dog"])
2
(注意尽管字符串是可迭代的,但它们没有__iter__方法包装器,因此不会导致任何问题...)