2013-09-28 329 views
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的名單,告訴我,每個數字的長度,不給我號碼的總數。

我一定錯過了一些基本的東西,但我不知道它是什麼!任何建議表示讚賞!謝謝!

+0

請格式化您的代碼縮進4空格。 – rlms

+0

從文本文件中發佈一些示例數據。 –

+0

@hcwhsa它應該運行良好? –

回答

1

此:

myList = (col[3]) 

將設置myListstr,而不是一個list,這將是一個數的表示。因此:

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

會將數字轉換爲數字。你想要int(myList)將整個字符串轉換爲數字。


你可以保持一個運行總計(初始化爲0),並做total += int(myList)以總價所有的數字。然後循環,你可以print的結果。

+0

int(「1 2 3」)嘗試... – LtWorf

+0

如果'myList'是那個,'[int(x)for myList]'會產生一個錯誤。 – Veedrac

0

也許你想用一個切片分配myList中

myList = col[3:] 

這將在第3列返回一個列表的一切。

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(' \噸 ')' 使得其通過TAB劃分列表。

如果是從文件中讀取行,看起來是這樣的:

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

山坳結構爲:

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

所以,如果你打算和山口[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))