2014-10-09 71 views
-1

我認爲sum a list of numbers in Python會回答我的問題,但它沒有。Python中列表的總和

對於背景下,我工作的項目歐拉,問題9:https://projecteuler.net/problem=9

我收到錯誤

TypeError: unsupported operand type(s) for +: 'int' and 'list' 

爲線

while sum(triplesList) <= 1000: 

我不知道爲什麼sum(listname)不起作用。

這裏是所有代碼:

triplesList = [] 

a = 0 
b = 0 

while sum(triplesList) <= 1000: 
    a += 1 
    b += 1 

    triplesList = [[a,b] for i in range(1)] 
    triplesList.append(a**2 + b **2) 

    if (math.sqrt(triplesList[1])).is_integer(): 
     triplesList[1] = int(math.sqrt(triplesList[1])) 

    if sum(triplesList[0], triplesList[1]) == 1000: 
     print triplesList 
     print sum(triplesList[0] , triplesList[1]) 
     print reduce(lambda x, y: x * y, triplesList[0], triplesList[1]) 

我感謝幫助!

+3

'triplesList = [[一,對於i B]在範圍(1)]'使得'list'的列表'list',因此你不能加總'triplesList'。 – CoryKramer 2014-10-09 16:45:56

+0

我很困惑,爲什麼我可以使用總和作爲一個條件之前,我已經把它列入清單。 – Longdaysjourneyintocode 2014-10-09 17:00:21

+0

因爲你初始化爲'triplesList = []',所以它只是一個列表。在您執行我所評論的列表理解之前,它不會成爲列表的列表。 – CoryKramer 2014-10-09 17:01:53

回答

1

改變這一行

triplesList = [[a,b] for i in range(1)] 

triplesList = [a, b, a**2 + b**2] 

,並清除

triplesList.append(a**2 + b **2) 

會產生這樣的形式[A,B,C]的一維列表,它是我讓你從所追求的感覺你題。

前者將產生的形式

[[a,b], c] 

你不能sum

1

sum()只接受一個可迭代的數字對象,而不是列表的列表。

triplesList是一個列表的列表,當你這樣做的:

triplesList = [[a,b] for i in range(1)] 

因此,SUM()抱怨道,它不知道如何添加列表的列表,只是整數

名單

我相信,線可改爲:

triplesList = [a, b] 
+1

(和)(https://docs.python。org/2/library/functions.html#sum)可用於任何可迭代的數據類型,其中包含對'+'運算符有效的數字類型 – 2014-10-09 17:28:27

+0

@FarmerJoe真棒,謝謝! – ErlVolton 2014-10-09 17:29:40