华南俳烁实业有限公司

python

當(dāng)前位置:中華考試網(wǎng) >> python >> python編程基礎(chǔ) >> 文章內(nèi)容

python語言的全排列怎么提速?

來源:中華考試網(wǎng)  [2020年10月4日]  【

  Python語言的全排列怎么提速?

  從n個(gè)不同元素中任取m(m≤n)個(gè)元素,按照一定的順序排列起來,叫做從n個(gè)不同元素中取出m個(gè)元素的一個(gè)排列。當(dāng)m=n時(shí)所有的排列情況叫全排列。顯然全排列很費(fèi)時(shí),這里用到了yield方法,全排列速度加倍

  什么是yield()方法?

  首先,如果你還沒有對(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的全部意思了:

  def foo():

  print("starting...")

  while True:

  res = yield 4

  print("res:",res)

  g = foo()

  print(next(g))

  print("*"*20)

  print(next(g))

  代碼的輸出:

  starting...

  4

  ********************

  res: None

  使用yield()方法的全排列:

  def perm(arr, pos = 0):

  if pos == len(arr):

  yield arr

  for i in range(pos, len(arr)):

  arr[pos], arr[i] = arr[i], arr[pos]

  for _ in perm(arr, pos + 1): yield _

  arr[pos], arr[i] = arr[i], arr[pos]

  for i in perm([1,2,3,4]):

  print i

責(zé)編:hym
  • 會(huì)計(jì)考試
  • 建筑工程
  • 職業(yè)資格
  • 醫(yī)藥考試
  • 外語考試
  • 學(xué)歷考試
临高县| 昔阳县| 岫岩| 厦门市| 常熟市| 南宫市| 赫章县| 治县。| 内乡县| 馆陶县| 宝兴县| 万载县| 布尔津县| 华亭县| 樟树市| 台北市| 项城市| 久治县| 准格尔旗| 鄄城县| 东安县| 福贡县| 双桥区| 鄂托克旗| 本溪市| 梁山县| 奎屯市| 大洼县| 平顺县| 康保县| 通化县| 抚顺市| 且末县| 道孚县| 肇源县| 赤水市| 邵东县| 吴川市| 滨海县| 梅州市| 新和县|