我有一个列表,如p = [[[[[[[[1, 2, 3]]]]]]]]
,我想要列表中列出的项目包括空列表的计数,所以对于此列表,我应该得到10.我试图枚举列表 -在Python中列表列表中列表中的子列表
for idx, item in enumerate(p):
count = count + idx
但我无法获得空列表。请指教。
我有一个列表,如p = [[[[[[[[1, 2, 3]]]]]]]]
,我想要列表中列出的项目包括空列表的计数,所以对于此列表,我应该得到10.我试图枚举列表 -在Python中列表列表中列表中的子列表
for idx, item in enumerate(p):
count = count + idx
但我无法获得空列表。请指教。
较短版本的代码如下:
>>> def recur_len(l):
return sum(1 + recur_len(item) if isinstance(item,list) else 1 for item in l)
>>> recur_len([[[[[[[[1, 2, 3]]]]]]]])
10
更详细的代码
>>> def recur_len(l):
count = 0
for item in l:
if isinstance(item,list):
count += 1 + recur_len(item)
else:
count += 1
return count
>>> recur_len([[[[[[[[1, 2, 3]]]]]]]])
10
如果您只想计算列表(或list
子类),没有别的,只是不只是包含另一个列表的最后名单的内容:
def len_counting_containers(inlist):
count = 0
current = inlist
while len(current) == 1 and isinstance(current[0], list):
count += 1
current = current[0]
return count + len(current)
len_counting_containers([[[[[[[[1, 2, 3]]]]]]]])
这给了我们:
10
请注意,这是一个非常脆弱的操作(因为您在python中使用isinstance()
) - 所以您要确保您的传入数据总是按照您的预期构建。如果您的数据来自您控制的来源,我建议您查看您如何生成数据并查看是否可以以更好的形式提供数据 - 例如:(7, [1,2,3])
。
您还可以递归实现这一点:
def len_counting_containers(current):
return len_counting_containers(current[0])+1 if len(current) == 1 and isinstance(current[0], list) else len(current)
len_counting_containers([[[[[[[[1, 2, 3]]]]]]]])
这使更少的代码相同的结果,但如果你有疯狂的大名单,这可能打击递归限制工作。
谢谢,我是一个新手,在这里尽可能地掌握我的能力,如果我将列表更改为myList =([1,[1,2,[3, 4]]]),这个操作我只有2个,但我有7个项目,请解释一下,我会尝试自己编码 – Varun 2012-03-31 12:19:46
啊,你说包括'空列表',所以我推测你的意思是只包含一个列表项目。我认为[jamylak的答案](http://stackoverflow.com/a/9955769/722121)做你想做的。 – 2012-03-31 12:22:14
def depth(a):
return 1 + depth(a[0]) if type(a) is list else 0
演示:
a = 'x'
for n in range(10):
a = [a]
print a, depth(a)
## ['x'] 1
## [['x']] 2
## [[['x']]] 3
## [[[['x']]]] 4
## [[[[['x']]]]] 5
## [[[[[['x']]]]]] 6
## [[[[[[['x']]]]]]] 7
## [[[[[[[['x']]]]]]]] 8
## [[[[[[[[['x']]]]]]]]] 9
## [[[[[[[[[['x']]]]]]]]]] 10
'code' DEF deep_count(P): \t总和= 0 \t为电子在号码: \t \t总和=总和+ 1 \t \t如果is_list(E): \t \t \t总和=总和+ deep_count(例如) \t return sum'code' – Varun 2012-04-04 10:39:02
没有空列表在那里。 – jamylak 2012-03-31 12:04:06
你能解释一下你如何得到10的清单? – 2012-03-31 12:05:29
他计数每个列表中的项目数并将它们加在一起 – jamylak 2012-03-31 12:07:10