如何用itertools解決無(wú)序排列組合的問(wèn)題
最近我作為Python菜鳥(niǎo)一枚開(kāi)始征戰(zhàn)Codewars,所以打算在這里記下遇到的有意思的題目。今天這第一題叫做“Best Travel”:
John和Mary計(jì)劃去一些小鎮(zhèn)旅行。Mary已經(jīng)列好了這些小鎮(zhèn)之間的距離比如ls=[50, 55, 57, 58, 60]。但是John不想開(kāi)車太累,所以提出了兩個(gè)要求:1) 開(kāi)車不超過(guò)某個(gè)距離比如t=174 miles 2) 只能去3個(gè)小鎮(zhèn)。
選擇哪3個(gè)小鎮(zhèn)可以讓John和Mary都滿意呢?(即找到距離之和最接近或等于t的3個(gè)小鎮(zhèn))
這道題目可以抽象成:
輸入一個(gè)整數(shù)列表ls和整數(shù)t:
1. 找出從ls中任取三個(gè)元素的所有組合
2. 計(jì)算每個(gè)組合的三個(gè)元素之和
3. 如果存在小于或等于t的和,那么從中挑出最大的,然后輸出這個(gè)最大和對(duì)應(yīng)的三元素組合
4. 如果不存在,只好返回None
實(shí)現(xiàn)要點(diǎn):
1. 無(wú)序排列組合:
用itertools模塊的combinations方法
2. 求和:
用sum函數(shù)
3. 求最大值:
用max函數(shù)
4. 捕獲異常:
用try-except
借用這一題的某個(gè)best solution, 實(shí)現(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解決無(wú)序排列組合的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用python實(shí)現(xiàn)3D聚類圖示例代碼
這篇文章主要介紹了使用python實(shí)現(xiàn)3D聚類圖效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08python利用Appium實(shí)現(xiàn)自動(dòng)控制移動(dòng)設(shè)備并提取數(shù)據(jù)功能
這篇文章主要介紹了python利用Appium自動(dòng)控制移動(dòng)設(shè)備并提取數(shù)據(jù),本文以控制抖音app滑動(dòng)并獲取抖音短視頻發(fā)布者為例,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09python實(shí)現(xiàn)批量監(jiān)聽(tīng)頁(yè)面并發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了python如何實(shí)現(xiàn)自動(dòng)化批量監(jiān)聽(tīng)頁(yè)面并發(fā)送郵件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11python?matplotlib繪畫(huà)十一種常見(jiàn)數(shù)據(jù)分析圖
這篇文章主要介紹了python?matplotlib繪畫(huà)十一種常見(jiàn)數(shù)據(jù)分析圖,文章主要繪制折線圖、散點(diǎn)圖、直方圖、餅圖等需要的小伙伴可以參考一下文章具體內(nèi)容2022-06-06PyQt5打開(kāi)文件對(duì)話框QFileDialog實(shí)例代碼
這篇文章主要介紹了PyQt5打開(kāi)文件對(duì)話框QFileDialog實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02