`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)?
答案 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