2013-02-11 2 views
0

Эй, ребята, я пытаюсь создать программу, которая учитывает эвены в двумерном списке. Программа, которую я сделал до сих пор, не возвращает то, что я хочу.Подсчет эвенов в двумерном списке?

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)' is '[0,1,2]', который содержит два значения. – inspectorG4dget

+0

Зачем вы хотите вернуть 4? Он возвращает то, что вы просите вернуть. –

+0

Почему бы не вернуть '0'? – Blender

ответ

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

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 == 1 и False == 0, так что вы получите ожидаемый результат.

Смежные вопросы