我有一個列表,如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