繁体   English   中英

计算未分隔的嵌套列表中的列表数

[英]Count number of lists within a nested list that is not separated

所以我有一个巨大的列表,其中嵌套了许多列表,我想计算这个大外部列表中的列表数量。 问题是这些列表没有被任何东西分隔,看起来像这样:

[[list1][list2][list3][list4]]

请帮忙!

根据评论,您的列表看起来像

nested = ['[a][b][c][d]']

(所以len(nested)=1 ,而type(nested_list[0])str

要计算“列表”的数量,您可以执行以下操作:

len(nested[0].split(']['))

假设您的数据是一个字符串,因为它不可能是一个列表,您可以尝试以下操作,如果列表没有更深地嵌套并且不包含包含][字符串:

x = '[[list1][list2][list3][list4]]'
print (len (x.split ('][') ) )
>>> 4

以下是我的假设,根据您的描述:

  • 你所拥有的是一个看起来几乎像一个列表的字符串
  • 这个“伪列表”中的每一项都是另一个“伪列表”
  • “伪列表”可以嵌套到任何级别
  • 你要数这些“伪列表”

这是我的想法:

  • 我称第一个列表为一级列表
  • 我们很想知道有多少个二级列表

代码:

import collections

li = '[[list1][list2][list3][list4]]'
counter = collections.Counter()
level = 0
for c in li:
    if c == '[':
        level += 1
        counter.update([level])
    elif c == ']':
        level -= 1

# We are interested in number of second-level lists
print 'List length:', counter[2]

输出:

List length: 4

此代码适用于任意嵌套的列表,例如:

li = '[[1][2][3][4[a][b][c][d]]]'

使用递归函数遍历嵌套列表树

  nested_list = [[['list 1'],['list 5']],['list2'],['list3'],['list4'],{'hello':'world'}]

 def countLists(nested_list):
   #print(nested_list)
   if len(nested_list)==1 & isinstance(nested_list,list):
        #print("return")
        return 1

    count=0
    for alist in nested_list:
         if isinstance(alist, list):
            retCount=countLists(alist)
            count+=retCount
            #print(alist)
    return count
        
countLists(nested_list)

输出:5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM