获取列表列表列表的长度

我有一些看起来有点奇怪的列表,如下所示:

listlist = [[], [[[[], []], [[]], []]], [[]]]

我试图找到所有列表长度的总和。

如果它是一个简单的多维数组(nxnxnx ...),找到列表长度的总和将非常容易,但在这种情况下,我不确定应该从哪里开始。

我尝试使用'for循环',但我认为这不是对这类问题的明确答案,应该有一个非常简单的方法来解决这类问题。

我会很感激任何建议。提前致谢!=]



墨色风雨
浏览 115回答 3
3回答

千巷猫影

这可能会将您推向正确的方向:def lenall(lst):    if isinstance(lst, list):        return 1 + sum(map(lenall, lst))    return 0>>> lenall(listlist)12这实际上计算了数据结构中列表的总数。如果要添加所有长度,则必须将其更改为:def lenall(lst):    if isinstance(lst, list):        return len(lst) + sum(map(lenall, lst))    return 0>>> lenall(listlist)11

拉丁的传说

这是一个可能的解决方案:listlist = [[], [[[[], []], [[]], []]], [[]]]def length(lst):    return len(lst) + sum(length(l) for l in lst if isinstance(l, list))print(length(listlist))输出11

子衿沉夜

这是应该做你想做的事情的代码。我包含了该函数的两个版本,一个是为了清楚起见,另一个是更小但功能相同。##################### Create a list of lists / elements#####################x = [[1,2,3],[3,4],[3,4,[3,4,5],[4],[5,4,6]],[4,3,4,5,[[[6]]]]]x = [[], [[[[], []], [[]], []]], [[]]]############################################################# First implementation (included for clarity)############################################################def get_len_lists(this_list):    # Set number of elements to 0    num_elem = 0                                  # Loop through each element in the list...    for elem in this_list:                                  # .. if it's a list...        if type(elem) == list:                                  # ... if the list is empty, count that as an element            if elem == list():                                      # ... so add one                num_elem += 1                                   else:                # ... get the number of elements...                num_elem += get_len_lists(elem) + 1         # ... otherwise...        else:                                                   # ... just add one to the length of the list            num_elem += 1                               # Return the number of elements in the list    return num_elem                                 ############################################################# Smaller implementation############################################################def get_len_lists_2(this_list):    # Set number of elements to 0    num_elem = 0                                        # Loop through each element in the list...    for elem in this_list:                                  # We add one for each level, regardless of whether it is an element or a list        num_elem += 1                                      # If it's a list...        if type(elem) == list:                                  # .. get the number of elements in the list            num_elem += get_len_lists(elem)             # Return the number of elements in the list    return num_elem                                 result1 = get_len_lists(x) + 1result2 = get_len_lists_2(x) + 1print(result1)print(result2)输出是:1212
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python