I have structure like this:
structure = [['a', 1], ['b', 3], ['c', 2]]
I would like to sum the integers [1+3+2
] using sum[]
builtin method [in one line].
Any ideas?
asked Aug 31, 2012 at 15:10
sum[n for _, n in structure]
would work.
answered Aug 31, 2012 at 15:11
David RobinsonDavid Robinson
75.5k15 gold badges162 silver badges180 bronze badges
13
sum[x[1] for x in structure]
should work
answered Aug 31, 2012 at 15:11
mgilsonmgilson
288k60 gold badges601 silver badges675 bronze badges
You could do
sum[zip[*structure][1]]
nbro
14.3k27 gold badges104 silver badges188 bronze badges
answered Aug 31, 2012 at 15:13
EricEric
92.6k52 gold badges230 silver badges360 bronze badges
2
Using a functional style, you could do
reduce[lambda x,y:x+y[1], structure,0]
nbro
14.3k27 gold badges104 silver badges188 bronze badges
answered Aug 31, 2012 at 15:26
John WangJohn Wang
4,4548 gold badges34 silver badges50 bronze badges
1
Sum the second element of each tuple in a list in Python #
Use a generator expression to sum the second element of each tuple in a list, e.g. result = sum[tup[1] for tup in list_of_tuples]
. The sum[]
function gets passed a generator object with the second element of each tuple in the list
and returns the total.
Copied!
list_of_tuples = [[10, 20], [30, 40], [50, 60]] result = sum[tup[1] for tup in list_of_tuples] print[result] # 👉️ 120
The first step is to use a generator expression to iterate over the list of tuples.
Generator expressions are used to perform some operation for every element or select a subset of elements that meet a condition.
On each iteration, we access the tuple element at index 1
[the second tuple item] and return the result.
The example passes a generator object that contains the numbers 20
,
40
, 60
to the sum[]
function, which then returns 120
.
You can use this approach to sum the Nth element of each tuple in a list.
Here is an example that sums the first element of each tuple in a list.
Copied!
list_of_tuples = [[10, 20], [30, 40], [50, 60]] result = sum[tup[0] for tup in list_of_tuples] print[result] # 👉️ 90
Python indexes are zero-based. The first item in a tuple [or any other iterable] has an index of 0
, the second an index of 1
, etc.
An alternative approach is to unpack the second item from each tuple in the generator expression.
Copied!
list_of_tuples = [[10, 20], [30, 40], [50, 60]] result = sum[second for _, second in list_of_tuples] print[result] # 👉️ 120
We only assigned the second item in the tuples to a variable.
The first item is stored in an underscore because it's not needed.
We basically unpack the second item from the tuple of the current iteration and assign the value to a variable.
Copied!
first, second = [10, 20] print[first] # 👉️ 10 print[second] # 👉️ 20
When using this approach, you have to make sure to declare exactly as many variables as you have items in the tuple.
Which approach you pick is a matter of personal preference. I'd use directly index access as if I find it easier to read and more explicit.