2

我刚开始编程,我知道我仍然缺少一些基础知识,但我正在努力解决这个问题。我有一个从文本文件中引入的 3 位和 4 位数字的列表,我试图得到这些数字的总和。到目前为止,我可以让 python 做的只是对每个单独的数字进行求和,所以如果列表中的第一个数字是 427,它会打印 13,而不是添加 427 + 504 + 219 等。

这就是我所拥有的:

myList = []
inFile = open('E:/GIS/GTECH 731/NYCElementarySchools.txt', 'r')
for row in inFile:
    col = row.split('\t')
    if col[1]=='BK':
        myList = (col[3])
        intList = [int(x) for x in myList]
        print sum(intList)

此外,当我让它打印长度时,它会给我一个 3 和 4 的列表,告诉我每个数字的长度,而不是给我数字的总数。

我一定错过了一些基本的东西,但我不知道它是什么!任何建议表示赞赏!谢谢!

4

3 回答 3

1

这个:

myList = (col[3])

将设置myList为 a str,而不是 a list,这将是一个数字的表示。因此:

intList = [int(x) for x in myList]

会将数字转换为数字。您想int(myList)将整个字符串转换为数字。


您可以保留一个运行总计(初始化为 0)并对total += int(myList)所有数字进行总计。然后循环之后你可以print得到结果。

于 2013-09-28T13:02:56.160 回答
1

在您的代码中:

col = row.split('\t')
if col[1]=='BK':
    myList = (col[3])
    intList = [int(x) for x in myList]
    print sum(intList)

'col = row.split('\t')' 生成一个由 TAB 划分的列表。

如果从文件中读取的行如下所示:

# \t is TAB
SOMETHING\tBK\t1\t2\t3

col结构是:

col[0] = SOMETHING
col[1] = BK
col[2] = 1
col[3] = 2
col[4] = 3

因此,如果您打算将 col[3] 与 col[...] 相加,则使用 col[3:] = list of col[3], col[4]

因此,如果要累积总和结果,则需要另一个变量。

myList = []
inFile = open('E:/GIS/GTECH 731/NYCElementarySchools.txt', 'r')
sumList = []
for row in inFile:
    row_total = 0
    col = row.split('\t')
    if col[1]=='BK':
        intList = [int(x) for x in col[3:]]
        row_sum = sum(intList)
        # row_sum = map(lambda x: int(x), col[3:])
        print 'row total: %d' % (row_sum)
        sumList.append(row_sum)

print 'total: %d' % (sum(sumList))
于 2013-09-28T14:48:40.683 回答
0

可能您想使用切片来分配 myList

myList = col[3:]

这将返回从第 3 列开始的所有内容的列表。

于 2013-09-28T13:33:36.730 回答