python從n個(gè)不同元素中任取m(m≤n)個(gè)元素,按照一定的順序排列起來(lái),叫做從n個(gè)不同元素中取出m個(gè)元素的一個(gè)排列。當(dāng)m=n時(shí)所有的排列情況叫全排列。顯然全排列很費(fèi)時(shí),這里用到了yield方法,全排列速度加倍
什么是yield()方法?
首先,如果你還沒(méi)有對(duì)yield有個(gè)初步分認(rèn)識(shí),那么你先把yield看做“return”,這個(gè)是直觀的,它首先是個(gè)return,普通的return是什么意思,就是在程序中返回某個(gè)值,返回之后程序就不再往下運(yùn)行了??醋鰎eturn之后再把它看做一個(gè)是生成器(generator)的一部分(帶yield的函數(shù)才是真正的迭代器),好了,如果你對(duì)這些不明白的話,那先把yield看做return,然后直接看下面的程序,你就會(huì)明白yield的全部意思了:
deffoo():
print("starting...")
whileTrue:
res=yield4
print("res:",res)
g=foo()
print(next(g))
print("*"*20)
print(next(g))
代碼的輸出:
starting...
4
********************
res:None
使用yield()方法的全排列:
defperm(arr,pos=0):
ifpos==len(arr):
yieldarr
foriinrange(pos,len(arr)):
arr[pos],arr[i]=arr[i],arr[pos]
for_inperm(arr,pos+1):yield_
arr[pos],arr[i]=arr[i],arr[pos]
foriinperm([1,2,3,4]):
printi
以上內(nèi)容為大家介紹了Python培訓(xùn)之語(yǔ)言的全排列怎么提速?,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。