1. python中用遞歸的思想求ABCDE的全排列
defp(s,res=[]):
#將字元c插入到數列ar中,會有多少種排列
defh(c,ar):
return[ar[:i]+[c]+ar[i:]foriinrange(len(ar)+1)]
#已有結果arr的基礎上,如果增加c字元,arr會變成多少種排列
defg(c,arr,res=[]):
ifarr==res==[]:
return[[c]]
elifarr==[]:
returnres
else:
returng(c,arr[1:],res+h(c,arr[0]))
#主體遞歸
ifs=='':
returnres
else:
returnp(s[1:],g(s[0],res))
if__name__=='__main__':
s='ABCDE'
forxinp(s):
print(''.join(x))
2. python程序全排列運行不出結果
可以使用回溯法進行全排列,代碼如下:
#coding=utf-8
a=['a','b','c','d','e','f']
defcheck(b,index,ch):
foriinb:
ifi==ch:
returnFalse
returnTrue
defenum(b,index):
ifindex==len(a):
print(b)
else:
forqina:
ifcheck(b,index,q):
b=b+q
enum(b,index+1)
b=b[0:-1]
if__name__=='__main__':
b=''
enum(b,0)
運行結果:
3. 一個字母組成的字元串,包含3個字母,並3個字母一次連續,比如:abc,bcd等,對該字元串每個字母
一共是780個假定abc為一個單位共有1個abc,
2個a,4個b和1個c一共8個單位進行含有相同元素的全排列共有8!/1!/2!/4!/1!=840種方法
含有相同元素的全排列演算法
總元素個數的階乘依次除以每種元素相同元素的階乘比如這里的共有1個abc,2個a,4個b和1個c一共8個單位進行含有相同元素的全排列總元素個數的階乘8!依次除以每種元素相同元素的階乘abc:1!,a:2!,b:4!,c:1!結果就是8! /1! /2! /4! /1!=840
其中仍然有重復的就是出現了兩個abc的情況
共有2個abc,1個a和3個b一共6個單位進行含有相同元素的全排列共有6!/2!/1!/3!=60種方法840-60=780
4. Python:全排列 - permuteUnique
給定一個可包含重復數字的序列 nums ,按任意順序 返回所有不重復的全排列。
示例 1:
輸入:nums = [1,1,2]
輸出:
[[1,1,2],
[1,2,1],
[2,1,1]]
示例 2:
輸入:nums = [1,2,3]
輸出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
源碼:
運行結果:
5. python中for循環放在後面要怎麼理解
i因為閉包,lambda生成之後i引用的就是for循環中的i
建議你看一下python的列表生成器,
f = [(lambda n : i + n) for i in range(10)] 等同於
f=[]
for i in range(10)
f.append(lambda n : i + n)
下面是相關內容
列表生成式即List Comprehensions,是Python內置的非常簡單卻強大的可以用來創建list的生成式。
舉個例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11):
>>> range(1, 11)[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎麼做?方法一是循環:
>>> L = []>>> for x in range(1, 11):... L.append(x * x)
...>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
但是循環太繁瑣,而列表生成式則可以用一行語句代替循環生成上面的list:
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
寫列表生成式時,把要生成的元素x * x放到前面,後面跟for循環,就可以把list創建出來,十分有用,多寫幾次,很快就可以熟悉這種語法。
for循環後面還可以加上if判斷,這樣我們就可以篩選出僅偶數的平方:
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]
還可以使用兩層循環,可以生成全排列:
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
三層和三層以上的循環就很少用到了。
運用列表生成式,可以寫出非常簡潔的代碼。例如,列出當前目錄下的所有文件和目錄名,可以通過一行代碼實現:
>>> import os # 導入os模塊,模塊的概念後面講到>>> [d for d in os.listdir('.')] # os.listdir可以列出文件和目錄['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public', 'VirtualBox VMs', 'Workspace', 'XCode']
for循環其實可以同時使用兩個甚至多個變數,比如dict的iteritems()可以同時迭代key和value:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }>>> for k, v in d.iteritems():... print k, '=', v... y = B
x = A
z = C
因此,列表生成式也可以使用兩個變數來生成list:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }>>> [k + '=' + v for k, v in d.iteritems()]
['y=B', 'x=A', 'z=C']
最後把一個list中所有的字元串變成小寫:
>>> L = ['Hello', 'World', 'IBM', 'Apple']>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']
小結
運用列表生成式,可以快速生成list,可以通過一個list推導出另一個list,而代碼卻十分簡潔。
思考:如果list中既包含字元串,又包含整數,由於非字元串類型沒有lower()方法,所以列表生成式會報錯:
>>> L = ['Hello', 'World', 18, 'Apple', None]
>>> [s.lower() for s in L]
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>AttributeError: 'int' object has no attribute 'lower'
使用內建的isinstance函數可以判斷一個變數是不是字元串:
>>> x = 'abc'>>> y = 123>>> isinstance(x, str)True>>> isinstance(y, str)False
請修改列表生成式,通過添加if語句保證列表生成式能正確地執行。
6. python一共多少組合(2023年最新整理)
導讀:本篇文章首席CTO筆記來給大家介紹有關python一共多少組合的相關內容,希望對大家有所幫助,一起來看看吧。
Python排列組合以上四種情況均為最常見的排列組合,從有無順序和是否重復兩個維度進行思考,建議理解並背誦。
在使用python計算排列組合之前,需要計算階乘,可以有兩種方式,一是使用math庫中的factorial函數,二是使用如下的遞歸函數。
按照排列的公式:
按照組合的公式:
3.1生日問題
假設一個班級中共有n個人,一年有365天,其中每天作為生日的概率是相等的,那麼其中至少有兩個人的生日在同一天的概率是多少?
此題屬於全排列問題,需要反向思考,寫出公式之後直接輸入到python中計算
3.2大樂透問題
大樂透的玩法是這樣的,從35個紅球中選擇5個,從12個紅球中選擇2個,如果全中,那就中一等獎。那麼請問,中一等獎的概率是多少?
此題屬於組合問題,中獎的可能性為一種,因此分子為1,分母為所有的組合情況。
6個數字選3個有多少組合python
6個數字選3個有20個組合python。
Python是一種解釋型的腳本語言。
是編程語言的一種,中文意思是蟒蛇。
python中的排列組合在日常的工作學習中,我們肯定會遇到排列組合問題,比如,在5種顏色的球中,任意取3個,共有多少種組合方式,這也包括有放回和無放回抽樣。
在python中,自帶的排列組合函數,都在python的指導工具包itertools中。
proct笛卡爾積(有放回抽樣排列)
permutations排列(不放回抽樣排列)
combinations組合,沒有重復(不放回抽樣組合)
combinations_with_replacement組合,有重復(有放回抽樣組合)
python3中返回的為對象,可以通過迭代讀取將值輸出。
end
結語:以上就是首席CTO筆記為大家整理的關於python一共多少組合的全部內容了,感謝您花時間閱讀本站內容,希望對您有所幫助,更多關於python一共多少組合的相關內容別忘了在本站進行查找喔。