Это то, что вам нужно, я думаю?
thing = sum(int(n) for n in number_list)
Примечание: это фактически генератор, нет необходимости помещать числа в список, а затем суммировать их, поэтому вы не видите []
в скобках вызова sum()
.
. Или из вашего примера выглядит, что вы действительно хотите суммировать отдельные цифры:
thing = sum(int(d) for n in number_list for d in n)
Ответьте на свой вопрос, можете ли вы добавить оператор +=
в список, - вы могли бы, но он не имеет возвращаемого значения для всех типов. +=
присваивает выражению перед оператором, но само это присваивание может иметь или не иметь возвращаемое значение, которое будет добавлено в список, который вы строите в понимании. В большинстве случаев это не то, что вам нужно.
@ ShadowRanger предположил, что решение, предлагаемое @yyforbidden, может быть быстрее - это на самом деле:
import random
from timeit import timeit
number_list = [str(random.randint(1, 100)) for _ in range(100)]
def comprehension():
return sum(int(d) for n in number_list for d in n)
def joined():
return sum(int(d) for d in ''.join(number_list))
assert comprehension() == joined()
print(timeit(comprehension, number=10000))
print(timeit(joined, number=10000))
Результат:
0.4073738
0.3616424
Я все же предпочел бы понимание, потому что оно более буквально заявляет, что происходит, и читаемый код часто предпочтительнее выполнения кода - но ваши потребности могут отличаться.