2017-01-02 69 views
-2

我寫的是它旁邊乘以與數列表中的元素的功能,並通過自己的號碼。這是密碼功能倍增列表的元素數量旁邊

def multiplyNums(aList): 
    newList=[] 
    for x in range(len(aList)): 
      if x < len(aList): 
       newList.append(aList[x]*aList[x+1]) 
      else: 
       newList.append(aList[x]*aList[x]) 
    return (newList) 

我真的認爲這會工作,但是有問題的範圍?在第5行

+0

你能擴大在*「有什麼問題」*?提供[mcve]。 – jonrsharpe

+1

簡單地設定條件以'如果x

回答

0

是的,有一個與範圍內的問題:循環體裏面,你訪問

aList[x+1] 

,這是訪問從條件x < len(aList)內。

然而,aList最後一個元素位於len(aList) - 1。因此,索引x + 1這裏索引超出界限 - 它是超出列表末尾的一個索引。

+0

我已完成此操作。比方說,我的測試用例是ALIST = [1,2,3],答案打印[2,6],因爲只通過前兩個數字的功能迭代,而不是最後的條件。 –

0

你要去一個索引太遠。請注意,列表中的最後一個元素索引爲len(aList)-1

更改此:

if x < len(aList): 

有:

if x < len(aList)-1: 
0

試試這個:

def multiplyNums(aList): 
    newList=[] 
    for x in range(len(aList)): 
      if x < len(aList)-1: 
       newList.append(aList[x]*aList[x+1]) 
      else: 
       newList.append(aList[x]*aList[x]) 
    return (newList) 

print(multiplyNums([1,2,3,4,5,6])) 

,輸出是:

[2, 6, 12, 20, 30, 36] 
0

另一種形式給出了使用itertools,zip名單與自己,但第一要素,mapmul操作的結果,將其轉換爲一個列表,並連接具有自己的最後一個元素的乘法:

import operator 
import itertools 
def multiplyNums(aList): 
    return list(itertools.starmap(operator.mul, itertools.izip(aList, aList[1:]))) + [aList[-1]*aList[-1]] 
print(multiplyNums([1,2,3,4,5,6])) 
[2, 6, 12, 20, 30, 36]