包含元组的整个列表的大小

size of a whole list containing tuple

我有一个由元组组成的列表

liste_groupe=((image1, image2, image6),(image5, image4, image8, image7, image3, image9))

我想知道所有元组的元素数量,即这里的结果是 9

我试过 len(liste_groupe) 但它给了我 2.

那么我应该写什么代码才能得到列表中所有元组的所有元素的数量?

将元组的元组展平为列表,

>>> liste_groupe=(('image1', 'image2', 'image6'),('image5', 'image4', 'image8', 'image7', 'image3', 'image9'))
>>> l = [item for t in liste_groupe for item in t]
>>> len(l)
9

# Or use itertools.chain
>>> import itertools
>>> l = list(itertools.chain(*liste_groupe))
>>> len(l)
9

如果你只关心元素个数,

>>> count = sum([len(t) for t in liste_groupe])
>>> count
9

您可以采用递归方法:

def tuple_length( t ):
    if type(t) != tuple:
        return 1
    length = 0
    for element in t:
        length += tuple_length( element )
    return length

现在,tuple_length(liste_groupe) 将按预期 return 9。

递归可以为你完成这个。使用以下函数可以计算 n 维元组或列表的大小。

def calculate_size(data_set, size=0):
    for i in data_set:
        if isinstance(i, tuple) or isinstance(i, list):
            size += calculate_size(i)
        else:
            size += 1
    return size

不需要为了找到总长度而将列表展平,如果您已经知道列表是一个简单的二维结构,则不需要使用递归。这就是您所需要的:

sum(map(len, liste_groupe))

适用于单个嵌套列表。对于更深或不规则嵌套的列表,您需要使用 chain 的递归函数。

from itertools import chain

cnt = len(list(chain.from_iterable(list_group)))