如何用itertools解決無序排列組合的問題
最近我作為Python菜鳥一枚開始征戰(zhàn)Codewars,所以打算在這里記下遇到的有意思的題目。今天這第一題叫做“Best Travel”:
John和Mary計劃去一些小鎮(zhèn)旅行。Mary已經(jīng)列好了這些小鎮(zhèn)之間的距離比如ls=[50, 55, 57, 58, 60]。但是John不想開車太累,所以提出了兩個要求:1) 開車不超過某個距離比如t=174 miles 2) 只能去3個小鎮(zhèn)。
選擇哪3個小鎮(zhèn)可以讓John和Mary都滿意呢?(即找到距離之和最接近或等于t的3個小鎮(zhèn))
這道題目可以抽象成:
輸入一個整數(shù)列表ls和整數(shù)t:
1. 找出從ls中任取三個元素的所有組合
2. 計算每個組合的三個元素之和
3. 如果存在小于或等于t的和,那么從中挑出最大的,然后輸出這個最大和對應(yīng)的三元素組合
4. 如果不存在,只好返回None
實現(xiàn)要點:
1. 無序排列組合:
用itertools模塊的combinations方法
2. 求和:
用sum函數(shù)
3. 求最大值:
用max函數(shù)
4. 捕獲異常:
用try-except
借用這一題的某個best solution, 實現(xiàn)代碼為:
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解決無序排列組合的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python getsizeof()和getsize()區(qū)分詳解
這篇文章主要介紹了Python getsizeof()和getsize()區(qū)分詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11
Pandas數(shù)據(jù)結(jié)構(gòu)中Series屬性詳解
本文主要介紹了Pandas數(shù)據(jù)結(jié)構(gòu)中Series屬性詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
從入門到精通:Python項目打包與setup.py實戰(zhàn)指南
想要將你的Python項目分享給世界嗎?本指南將帶你從零開始,一步步學習如何打包你的Python項目,并創(chuàng)建一個專業(yè)的setup.py文件,我們將分享實用的技巧和最佳實踐,幫助你的項目在Python社區(qū)中脫穎而出,跟著我們的步伐,讓你的項目打包變得輕松有趣!2024-03-03
python實現(xiàn)多層感知器MLP(基于雙月數(shù)據(jù)集)
這篇文章主要為大家詳細介紹了python實現(xiàn)多層感知器MLP,基于雙月數(shù)據(jù)集,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01

