一個有n+n^2+n^3。。。+n^n的Python私活訂單
首先看下這個讓我掉層頭皮的資料,看上去很簡單,很友好對吧?
1。需求
這個示例需要我根據懸賞者給定的某個
指定值
,比如0,來將這個資料集中所有可能的加和結果等於指定值對應的數值找出來,並將這些數值在旁邊列標記為y,看上去也還可以不算太不友好,對吧?
接下來,先看下這組資料什麼特點,先看下降序後的正數部分:
然後再看下升序後的負數部分
執行程式碼,你會發現還有很多0。01,這些資料告訴你,他的組合是千千萬萬的。
2。 程式碼部分
第一步,透過pandas的read_excel()方法
就不能讀取
,報錯資訊顯示這是一個位元位元組資料型別,不支援匯入,於是我就換了xlwings庫裡面range物件,來獲取目標資料區域:
然後就到了業務部分,我一開始沒想太多,就只是簡單的認為把資料集每個數拿出來,遍歷,然後和接下來的所有的資料做累積求和,直到等於
指定值
即可,然後自己寫幾個測試集看看效果即可,看下程式碼:
測試集1:
測試集2:
測試集3:
這裡我的
指定值
是5,測試集1完美透過演算法,但是測試集2和3,就沒有任何結果,這是絕對不可接受的,因為肉眼都能看出有這樣的組合,於是我就在想我的程式碼的邏輯是不是錯了。
果然,我的邏輯都是基於所有的數累加是連續的序列的情況下,那麼對於不連續的情況,比如5可以拆解為1,2,3,9,-9或者其他任何類似的組合,而且連續的求和有可能數值越來越大,根本無法滿足條件就把電腦給卡死了,要知道他給我說的他的資料集能多到幾萬條。
那我就在想能有多少種情況來處理這個邏輯,那就逐步演化唄,首先直接找到相反數,是最簡單的,而這種情況會有n個,而如果是找到有兩個加和等於指定值,他的可能性是n^2個,類似的如果是三個就會有n^3個,以此類推直到n^n個,理論想通了,程式碼如何實現:
我用了itertools裡面的combinations方法,能夠將所有的組合情況都給出,完美符合我的想法,然後事實很快打臉
程式碼執行到2520結果行的時候就卡住不動了,要知道我的電腦有12核,而且這個結果集我只提供了51條資料
姑且不去管最大值項外的其他項,看到圖片裡的
51^51結果
了嗎,你覺得這個單子有法做嗎?
如果你有更好的解法,聯絡ant_learn_python,這個100元的單子就是你的。
最後,推薦螞蟻老師的Pandas入門課程:
https://ke.qq.com/course/4000628?tuin=2957a4ad
Pandas入門到實戰案例48集