Здравствуйте, я пытаюсь подсчитать все элементы в списке списков. НапримерСписок элементов списка списка Python
a = [[1,2],[3,4],[10,3,8]]
Я хочу вернуться:
7
Я пытался их количество и размер не повезло. Спасибо заранее.
Здравствуйте, я пытаюсь подсчитать все элементы в списке списков. НапримерСписок элементов списка списка Python
a = [[1,2],[3,4],[10,3,8]]
Я хочу вернуться:
7
Я пытался их количество и размер не повезло. Спасибо заранее.
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
Обратите внимание, что это не будет работать, если ваши списки имеют многоуровневые уровни. В этом случае вам понадобится рекурсивное решение. –
@adsmith Согласен, но OP говорит, что просто «список списков» – thefourtheye
На самом деле, поскольку вопросник хочет подсчитать элементы в списке списков, то рекурсия через любое количество уровней списка даст неверный ответ в случае где списки более глубокие. Речь идет о том, хотите ли вы, чтобы для параметра [[[1,2]]] 'был равен 1 (количество элементов в списке-списках: этот один элемент является списком) или 2 (количество элементов на любом уровне вложенных списков). –
Вы можете либо суммировать длины (например, @thefourtheye предложил), или перебрать все элементы, и посчитайте:
sum(len(b) for b in a)
sum(1 for b in a for c in b)
Первый способ, безусловно, лучше, но второй хорош для демонстрации некоторых вещей, которые вы можете сделать со списком, а также будет работать над более общей структурой, итерабельными итерами (которые не имеют __len__
).
Для повторения итераций вы, вероятно, захотите заменить использование 'len' чем-то вроде' def mylen (iterable): try: return len (iterable), кроме TypeError: return sum (1 для x в итерабельном) '. То есть, делайте это быстро для итераций, где это возможно, в противном случае медленнее. –
Для академических целей, если ваш список более чем на один уровень (например, [ [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 легче решить один из других ответов. Просто отметим, что эти решения нелегко масштабируются.
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
list_count = 0
mainList = [[1,2],[3,4],[10,3,8]]
for inner_list in mainList:
list_count += len(inner_list)
print(list_count)
Для множественных уровней глубоко 'Len (. Ул (а) .strip ('[]') Раскол (''))' Edit I попробовал здесь: http://ideone.com/gzpt65 –
для вашего списка: http://ideone.com/U1f93P –