2014-02-06 182 views
1

您好,我正在嘗試統計列表中的所有元素。 例如列表計數元素的Python列表

a = [[1,2],[3,4],[10,3,8]] 

我要回:

7 

我試過數量和尺寸,沒有運氣。 在此先感謝。

+1

對於多級深'LEN(STR(A).strip( '[]')分割( ''))'編輯我嘗試在這裏:http://ideone.com/gzpt65 –

+0

爲您的列表:http://ideone.com/U1f93P –

回答

6
a = [[1,2],[3,4],[10,3,8]] 
print(sum(map(len, a))) 

輸出

7 

這可以寫爲一個發電機表達,這樣

print(sum(len(item) for item in a)) 

這將工作,即使對於多級嵌套列表的最簡單的方法,是這樣的

def get_size(current_item): 
    if isinstance(current_item, list): 
     return sum(get_size(item) for item in current_item) 
    else: 
     return 1 

a = [[1,2],[3,4],[10,3,8],[[1, 2, 3], [2, 3]]] 
print get_size(a) # 12 
+1

請注意,如果您的列表是多層次的,這將無法正常工作。在這種情況下,您需要使用遞歸解決方案。 –

+1

@adsmith同意,但OP說,只是'列表清單' – thefourtheye

+1

事實上,由於提問者想要計算列表中的元素,然後遞歸通過任意數目的列表級別將給出錯誤的答案列表更深層次。這是一個問題,你是否想讓[[[1,2]]]的回答爲1(列表中元素的數量:這個元素恰好是列表)或2任何級別的嵌套列表中的元素數量)。 –

0

您可以總結的長度(如@thefourtheye建議),或遍歷所有元素,並計算:

sum(len(b) for b in a) 
sum(1 for b in a for c in b) 

第一種方法顯然是更好的,但第二個是用於證明一些事情你可以做的很好與列表解析,也將工作在一個更一般的結構,迭代迭代(其中沒有__len__定義)。

+0

)對於可迭代的iterable,你可能想用'def mylen(iterable)'來代替'len'的使用:try:return len(iterable ),除了TypeError:return sum(1代表可迭代中的x)'。也就是說,儘可能快地爲迭代操作,否則減慢。 –

1

對於學術而言,如果你的列表是不止一個級別深度(例如[ [1,2,3], [4,5,[6,7,8]]],你的元素之一包含一個列表),你想要做的事,如:

def count_elements(target): 
    count = 0 
    for element in target: 
     if type(element) is list: 
      count += count_elements(element) 
     else: 
      count += 1 
    return count 

但問題描述通過OP更容易解決其他答案之一。只要提到這些解決方案不容易擴展。

0
def myLen(L): 
    if not L: 
     return 0 
    elif not isinstance(L[0], list): 
     return 1 + myLen(L[1:]) 
    else: 
     return myLen(L[0]) + myLen(L[1:]) 

輸出:

>>> myLen([[1,2],[3,4],[10,3,8]]) 
7 
0
list_count = 0 

mainList = [[1,2],[3,4],[10,3,8]] 
for inner_list in mainList: 
    list_count += len(inner_list) 

print(list_count)