关于python:包含元组的整个列表的大小

size of a whole list containing tuple

本问题已经有最佳答案,请猛点这里访问。

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

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

我想得到所有元组ie的元素个数,结果是9。

我试过Len(李斯特集团),但它给了我2分。

那么,我应该编写什么代码来获得列表中所有元组的所有元素的数目呢?


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

1
2
3
from itertools import chain

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


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

1
sum(map(len, liste_groupe))


递归可以为您完成这一点。通过以下函数,可以计算n维元组或列表的大小。

1
2
3
4
5
6
7
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


您可以使用递归方法:

1
2
3
4
5
6
7
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)将按预期返回9。


将一组元组展平到列表中,

1
2
3
4
5
6
7
8
9
10
>>> 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

如果你只关心元素的数量,

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