簡體   English   中英

總結鄰居數

[英]Summing up neighbors numbers

我正在嘗試遍歷列表中的所有數字,並且我想將每個數字與他的鄰居相加。

    DataList=[2,7,18,22]
    total=0
    for number in DataList:
        total+=number
    print(DataList[0] + DataList[1])
    print(DataList[0] + DataList[1]+DataList[2])
    print(DataList[1] + DataList[2]+DataList[3])
    print(DataList[2] + DataList[3])

#Output from code above
9
27
47
40

正如您從上面的代碼中看到的那樣,我已經提出了一些解決方案,但是這個解決方案並不好(實際上我有非常大的示例)因為我用 print 輸入了所有命令,所以任何人都可以幫助我如何解決這個問題並進行自動循環和對所有鄰居數求和?

只需將if-elif-else與循環混合使用:

DataList=[2,7,18,22]
for i in range(len(DataList)):
    if i == 0:
        print(DataList[i] + DataList[i+1])
    elif i == len(DataList)-1:
        print(DataList[i-1] + DataList[i])
    else:
        print(DataList[i-1] + DataList[i] + DataList[i+1])

itertools 中有一個 function ,它是累積的,它實際上可以按照您的意願運行。 這是 python 文檔,您可以在這里找到累積的https://docs.python.org/3/library/itertools.ZA7635FDC70D2EFC26

DataList=[2,7,18,22]
xp=[items for item in [[sum(DataList[:x+1]),sum(DataList[x:])]for x in range(len(DataList))] for items in item]
print(xp)

我認為這是您打算擁有的:

totalNum = len(DataList)
totalSum = 0
sumArray = [0]*totalNum

for i in range(totalNum):
    sumArray[i] += DataList[i]
    if i+1 < totalNum:
        sumArray[i] += DataList[i+1]
    if i-1 > 0:
        sumArray[i] += DataList[i-1]
for i in range(totalNum):
    print(sumArray[i])

一種“聰明”的方法是創建三個版本的列表,並附加0 ,然后將它們相加。

DataList = [ 2, 7, 18, 22 ]

l = [ 0, 0 ] + DataList
c = [ 0 ] + DataList + [ 0 ]
r = DataList + [ 0, 0 ]

sums = [ sum( n ) for n in zip( l, c, r ) ]

然后,如果您不想要它們,您可以將元素從末端切掉。

使用這種方法,您還可以使用numpy來加快大型列表的計算速度。

sums = np.sum( np.array( [ l, c, r ] ), axis = 0 )

對於不同大小的列表,您可以看到numpy收益(注意 y 軸是對數刻度) 列表和 numpy 鄰居和的時序比較。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM