最近我作為Python菜鳥一枚開始征戰Codewars,所以打算在這里記下遇到的有意思的題目。今天這第一題叫做“Best Travel”:
John和Mary計劃去一些小鎮旅行。Mary已經列好了這些小鎮之間的距離比如ls=[50, 55, 57, 58, 60]。但是John不想開車太累,所以提出了兩個要求:1) 開車不超過某個距離比如t=174 miles 2) 只能去3個小鎮。
選擇哪3個小鎮可以讓John和Mary都滿意呢?(即找到距離之和最接近或等于t的3個小鎮)
這道題目可以抽象成:
輸入一個整數列表ls和整數t:
1. 找出從ls中任取三個元素的所有組合
2. 計算每個組合的三個元素之和
3. 如果存在小于或等于t的和,那么從中挑出最大的,然后輸出這個最大和對應的三元素組合
4. 如果不存在,只好返回None
實現要點:
1. 無序排列組合:
用itertools模塊的combinations方法
2. 求和:
用sum函數
3. 求最大值:
用max函數
4. 捕獲異常:
用try-except
借用這一題的某個best solution, 實現代碼為:
1
2
3
4
5
6
7
|
def choose_best_sum(t, k, ls): import itertools try : return max ( sum (combination) for combination in itertools.combinations(ls, k) if sum (combination) < = t) except : return None |
以上這篇如何用itertools解決無序排列組合的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。