将都位于元组索引1的值相加

时间:2018-10-22 22:15:31

标签: python

`data_sorted = [('Alabama', 4699671, 163629, 0.03294111631266611, 104018,
 0.02094047532290061), ('Alaska', 684530, 57364, 0.07484024496207367, 24592,
 0.032084082422901394)]

到目前为止我所拥有的:

def calc_totals(data_sorted):
    for line in data_sorted:
        tot_nat_born = int(i[1])
        print(tot_nat_born)`

我如何才能使calc_totals()取两个索引1并将它们相加,基本上就等于(4699671 + 648530)?

2 个答案:

答案 0 :(得分:2)

如果将代码中的i更改为line,则可以成功打印每个内部元组的第二个元素。 (调用int似乎是不必要的,因为您已经期望在位置2处有整数。)

您现在需要做的是将这些值加在一起并返回总数。这是最直接的实现:

def calc_totals(data):
    total = 0
    for record in data:
        total += record[1]
    return total

想法是将total初始化为零,然后将record[1]中每个数据记录的第二个元素data添加到total

演示

>>> data_sorted = [('Alabama', 4699671, 163629, 0.03294111631266611, 104018,
...: 0.02094047532290061), ('Alaska', 684530, 57364, 0.07484024496207367, 24592,
...: 0.032084082422901394)]
...: 
>>> calc_totals(data_sorted)
>>> 5384201

...,如果您想花哨:

>>> from operator import itemgetter
>>> sum(map(itemgetter(1), data_sorted))
>>> 5384201

...或使用sum和generator-expression:

>>> sum(record[1] for record in data_sorted)
>>> 5384201

如果后两种解决方案看起来很怪异,请在掌握了Python基础知识后再回到它们。

答案 1 :(得分:0)

您可以在基本的Python tot_nat_born = sum(line[1] for line in data_sorted)中执行此操作,但是...

pandas 软件包可以更好地进行2D数据操作,实际上,对pandas中的列求和的解决方案只是df[1].sum()

import pandas as pd

df = pd.DataFrame( [('Alabama', 4699671, 163629, 0.03294111631266611, 104018,  0.02094047532290061), ('Alaska', 684530, 57364, 0.07484024496207367, 24592,  0.032084082422901394)] )

>>> df[1]
0    4699671
1     684530
Name: 1, dtype: int64

df[1].sum()
5384201

查看快速入门10 Minutes to pandas