6

你如何找到多维列表的长度?

我自己想出了一种方法,但这是在多维列表中查找值数量的唯一方法吗?

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) 不起作用,因为它只给出了内部列表的数量。还有比这更有效的方法吗?

4

4 回答 4

11

怎么样:

sum(len(x) for x in multilist)
于 2013-04-14T05:55:11.707 回答
4

替代@mgilson 的解决方案

sum(map(len, multilist))
于 2013-04-14T06:36:00.253 回答
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

无论列表的形状或大小如何,这都会返回列表中的项目数

于 2017-02-04T13:05:33.273 回答
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__ 方法包装器,因此不会导致任何问题......)

于 2013-04-14T06:45:01.667 回答