Использование «цикла for» для суммирования значений вложенного списка и возврата (общая сумма)

Я получаю количество каждой строки в каждом списке, я хочу суммировать каждое конкретное значение всего списка (включая вложенные списки)

[[3],[4],][1],[3]] = * 11 - мой желаемый результат.

пример: код

ar1 = [
          ['jam','apple','pear'],
          ['toes','tail','pinky','liar'],
          ['aha!'],
          ['jam','apple','pear']
      ]

def function(arg1)
    heads = 0
    for i in arg1:
        heads += arg1.count(i)
        print heads

Я использовал этот print, потому что я не знаю, как компилировать и отлаживать что-либо кроме оператора печати и перепроверки работы, поэтому, пожалуйста, не ругайте.(оповещение для новичков)

пример: результат

['jam','apple','pear']     1
['toes','tail','pinky','liar']    2
['aha!']     3
['jam','apple','pear']    4

Я предпочитаю подсказку или подсказки о том, какие методы я должен применять, или пример. Я ни в коем случае не жду решения. я


person CabMod    schedule 14.03.2015    source источник
comment
Вы обязаны использовать цикл for? Если вам не нужно знать количество для каждой конкретной строки списка, простой маршрут будет состоять в том, чтобы сгладить список (по сути, поместить каждый элемент каждого подсписка на один и тот же уровень одного списка) и подсчитать количество элементов в этот одноуровневый список. Вот ветка по сглаживанию списков: плоский список из списка списков в python"> stackoverflow.com/questions/952914/   -  person Boa    schedule 15.03.2015


Ответы (2)


У вас есть несколько вариантов:

1. сгладьте свой вложенный список и рассчитайте длину общего списка:

>>> len(reduce(lambda x,y:x+y,ar1))
11

Или вы можете перебрать свой список и суммировать длину всех ваших подсписков, которые вы можете сделать с помощью выражения генератора в функции sum:

>>> sum(len(i) for i in ar1)
11
person kasravnd    schedule 14.03.2015
comment
мне не разрешено использовать математический модуль. Я думаю об альтернативных способах. и это моя загадка. - person CabMod; 15.03.2015
comment
@CabMod, а как насчет голосования? - person kasravnd; 15.03.2015
comment
я только что пытался проголосовать, у меня нет минимально необходимой репутации 15. @Kasra - person CabMod; 15.03.2015
comment
@CabMod, чтобы вы могли принять ответ! а если бы было полезно! ;) - person kasravnd; 15.03.2015

Если ваши фактические данные содержат более глубокую вложенность, чем вы показали:

def sum_len(lst):
    return sum(1 if not isinstance(e, list) else sum_len(e) for e in lst)

ar1 = [
          ['jam','apple','pear'],
          ['toes','tail','pinky','liar'],
          ['aha!'],
          ['jam','apple','pear']
      ]
print sum_len(ar1)  # 11

# Same elements, with arbitrary list wrapping:
ar2 = [
          [['jam','apple',['pear']]],
          [['toes',['tail','pinky'],'liar']],
          [['aha!']],
          [[['jam','apple'],'pear']]
      ]
print sum_len(ar2)  # 11
person jedwards    schedule 14.03.2015