我刚开始编程,我知道我仍然缺少一些基础知识,但我正在努力解决这个问题。我有一个由文本文件引入的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的列表,告诉我每个数字的长度,而不是给我总数。
我必须遗漏一些基本的东西,但我不知道它是什么!任何建议表示赞赏!谢谢!
答案 0 :(得分:1)
此:
myList = (col[3])
会将myList
设置为str
,而不是list
,这将代表一个数字。因此:
intList = [int(x) for x in myList]
会将数字转换为数字。您希望int(myList)
将整个字符串转换为数字。
您可以保持运行总计(初始化为0)并执行total += int(myList)
以计算所有数字的总和。然后在循环之后,您可以print
结果。
答案 1 :(得分: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:] = 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))
答案 2 :(得分:0)
您可能希望使用切片来指定myList
myList = col[3:]
这将返回列表中第3列的所有内容。