2013-02-11 68 views
0

嘿傢伙我想製作一個計算二維列表中的均值的程序。我迄今爲止所做的計劃並沒有回報我想要的。在二維列表中計數evens?

def Evens(x): 
    count = 0 
    x = len(x) 
    for a in range(x): 
     if a%2 == 0: 
      count = count + 1 
    return count 

,保持返回2列表Evens([[1,3],[1,9,7,1,3],[13]])時,我想它返回4.我什麼都試過,但它似乎無法正常工作。

感謝

+0

您是否想要統計所有子列表中偶數的數量?我在示例輸入中看不到任何偶數。在您的示例中,「len(x)」是3(3個子列表,總數),'range(3)'是包含兩個evens的[0,1,2]。 – inspectorG4dget 2013-02-11 07:57:40

+0

爲什麼你想讓它返回4?它正在返回你要求它返回的內容。 – 2013-02-11 07:58:10

+0

爲什麼不返回'0'? – Blender 2013-02-11 08:01:09

回答

3

您遇到的問題是,你正在檢查的指標,看看他們甚至,不是值。你也沒有檢查子列表。

更簡單,國際海事組織,是要做到這一點:

import itertools 
def evens(x): 
    return sum(a % 2 == 0 for a in itertools.chain.from_iterable(x)) 
0

您需要遍歷每個子列表中的元素,以及:

def count_evens(l): 
    total = 0 

    for l2 in l: 
     for item in l2: 
      if item % 2 == 0: 
       total += 1 

    return total 

你以前這樣做是遍歷子列表的數量(即[0, 1, 2, 3]4元素的列表)。您的代碼正在工作,但無法正常工作。

+0

謝謝,謝謝!我因爲錯過了這個而感到很蠢。代碼現在工作完美! – JGrazza 2013-02-11 08:09:30

2

您需要遍歷所有的子列表:

In [34]: l = [[1,4,3],[12,0,7,10,3],[13]] 

In [35]: sum(n%2 == 0 for sub in l for n in sub) 
Out[35]: 4 
3

實際上你需要遍歷子列表。

def evens(l): 
    count = 0 
    for l2 in l: 
     for i in l2: 
      if i%2 == 0: 
       count += 1 
    return count 

或者你可以採取更簡單的方法。

def evens(l): 
    return sum(i%2==0 for l2 in l for i in l2) 

第二種方法使用的事實,在整數上下文,True == 1False == 0,所以你會得到預期的結果。