比如有1、2、3這三個數(shù)字,要進行排列,則一共有以下6種情況:
在雨城等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、網(wǎng)站制作 網(wǎng)站設(shè)計制作按需網(wǎng)站開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷,成都外貿(mào)網(wǎng)站建設(shè)公司,雨城網(wǎng)站建設(shè)費用合理。
數(shù)字比較少的時候,咱們可以直接手動一一列舉出來,如果有n個數(shù)字,怎么快速計算排列數(shù)呢?咱們可以靠已有的認知,自己寫出公式。
綜合以上情況,那就是
(數(shù)學(xué)其實就是這樣,并沒有什么高深的公式,就是靠一點一點簡單的公式累積起來,只要邏輯嚴謹,推導(dǎo)過程詳細,小白也能看得懂)
以上是對給的所有數(shù)字進行排列的情況,而更一般的情況是,給n個球,從中選擇m個,計算有多少種排列情況,道理和上面一樣,下面直接給出計算公式,不再贅述。
通用公式如下所示:
8個超好用內(nèi)置函數(shù)set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()
python中有許多內(nèi)置函數(shù),不像print那么廣為人知,但它們卻異常的強大,用好了可以大大提高代碼效率。
這次來梳理下8個好用的python內(nèi)置函數(shù)
1、set()
當需要對一個列表進行去重操作的時候,set()函數(shù)就派上用場了。
用于創(chuàng)建一個集合,集合里的元素是無序且不重復(fù)的。集合對象創(chuàng)建后,還能使用并集、交集、差集功能。
2、eval()之前有人問如何用python寫一個四則運算器,輸入字符串公式,直接產(chǎn)生結(jié)果。用eval()來做就很簡單:eval(str_expression)作用是將字符串轉(zhuǎn)換成表達式,并且執(zhí)行。
3、sorted()在處理數(shù)據(jù)過程中,我們經(jīng)常會用到排序操作,比如將列表、字典、元組里面的元素正/倒排序。這時候就需要用到sorted() ,它可以對任何可迭代對象進行排序,并返回列表。對列表升序操作:
對元組倒序操作:
使用參數(shù):key,根據(jù)自定義規(guī)則,按字符串長度來排序:
根據(jù)自定義規(guī)則,對元組構(gòu)成的列表進行排序:
4、reversed()如果需要對序列的元素進行反轉(zhuǎn)操作,reversed()函數(shù)能幫到你。reversed()接受一個序列,將序列里的元素反轉(zhuǎn),并最終返回迭代器。
5、map()做文本處理的時候,假如要對序列里的每個單詞進行大寫轉(zhuǎn)化操作。這個時候就可以使用map()函數(shù)。
map()會根據(jù)提供的函數(shù),對指定的序列做映射,最終返回迭代器。也就是說map()函數(shù)會把序列里的每一個元素用指定的方法加工一遍,最終返回給你加工好的序列。舉個例子,對列表里的每個數(shù)字作平方處理:
6、reduce()前面說到對列表里的每個數(shù)字作平方處理,用map()函數(shù)。那我想將列表里的每個元素相乘,該怎么做呢?這時候用到reduce()函數(shù)。
reduce()會對參數(shù)序列中元素進行累積。第一、第二個元素先進行函數(shù)操作,生成的結(jié)果再和第三個元素進行函數(shù)操作,以此類推,最終生成所有元素累積運算的結(jié)果。再舉個例子,將字母連接成字符串。
你可能已經(jīng)注意到,reduce()函數(shù)在python3里已經(jīng)不再是內(nèi)置函數(shù),而是遷移到了functools模塊中。這里把reduce()函數(shù)拎出來講,是因為它太重要了。
7、filter()一些數(shù)字組成的列表,要把其中偶數(shù)去掉,該怎么做呢?
filter()函數(shù)輕松完成了任務(wù),它用于過濾序列,過濾掉不符合條件的元素,返回一個迭代器對象。filter()函數(shù)和map()、reduce()函數(shù)類似,都是將序列里的每個元素映射到函數(shù),最終返回結(jié)果。我們再試試,如何從許多單詞里挑出包含字母w的單詞。
8、enumerate()這樣一個場景,同時打印出序列里每一個元素和它對應(yīng)的順序號,我們用enumerate()函數(shù)做做看。
enumerate翻譯過來是枚舉、列舉的意思,所以說enumerate()函數(shù)用于對序列里的元素進行順序標注,返回(元素、索引)組成的迭代器。再舉個例子說明,對字符串進行標注,返回每個字母和其索引。
枚舉:是一種基本數(shù)據(jù)類型而不是構(gòu)造數(shù)據(jù)類型
枚舉可以根據(jù)Integer、Long、Short或Byte中的任意一種數(shù)據(jù)類型來創(chuàng)建一種新型變量。這種變量能設(shè)置為已經(jīng)定義的一組之中的一個,有效地防止用戶提供無效值。該變量可使代碼更加清晰,因為它可以描述特定的值。
使得程序的可讀性和可維護性大大提高然而,很不幸,也許你習(xí)慣了其他語言中的枚舉類型,但在Python3.4以前卻并不提供。
關(guān)于要不要加人枚舉類型的問題就引起了不少討論,眾多開發(fā)者曾提出增加枚舉的建議,但被拒絕。于是人們充分利用Python的動態(tài)性這個特征想出了枚舉的各種替代實現(xiàn)方式。(前輩們真的都是大神)
1.使用類屬性。
2.借助函數(shù)
3.使用 collections.namedtuplec
Python中枚舉的替代實現(xiàn)方式遠不止上述這些,在此就不一一列舉了。那么,既然枚舉在Python中有替代的實現(xiàn)方式。為什么人們還要執(zhí)著地提出各自建議要求語言實現(xiàn)枚舉呢?
顯然這些替代實現(xiàn)有其不合理的地方。
(1)允許枚舉值重復(fù)。
我們以collections.namedtuple為例,下面的例子中枚舉值Spring與Autumn相等,但卻不會提示任何錯誤。
(2)支持無意義的操作。
實際上2.7以后的版本還有另外一種替代選擇:使用第三方模塊flufl.enum,它包含兩種枚舉類:一種是Enum,只要保證枚舉值唯一即可,對值的類型沒限制;還有一種是IntEnum,其枚舉值為int型。
可以直接使用value屬性獲取枚舉元素的值,如: