最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python字符串的全排列算法實(shí)例詳解

 更新時(shí)間:2019年01月07日 14:27:05   作者:hustfc  
這篇文章主要介紹了Python字符串的全排列算法,結(jié)合實(shí)例形式較為詳細(xì)的總結(jié)分析了Python字符串全排列的常見(jiàn)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Python字符串的全排列算法。分享給大家供大家參考,具體如下:

題目描述

輸入一個(gè)字符串,按字典序打印出該字符串中字符的所有排列。例如輸入字符串a(chǎn)bc,則打印出由字符a,b,c所能排列出來(lái)的所有字符串a(chǎn)bc,acb,bac,bca,cab和cba。

輸入描述

輸入一個(gè)字符串,長(zhǎng)度不超過(guò)9(可能有字符重復(fù)),字符只包括大小寫(xiě)字母。

注意有可能重復(fù),因此需要判斷
注意list的append方法和list的+方法的區(qū)別
append方法在list后面添加元素
+方法在list后面添加list
如果使用append(list),那么list中所有的元素都會(huì)作為一項(xiàng)插入

swap函數(shù)將新的元素與之前的所有元素交換,返回一個(gè)列表,每一次交換都插入一個(gè)元素,因此是append方法

def swap(self, newElem, Elem):
 result = []
 listElem = list(Elem)
 listElem.insert(0, newElem)
 result.append(''.join(listElem))
 for i in range(1, len(listElem)):
 preList = listElem[:] #注意這個(gè)地方
 listElem[0], listElem[i] = listElem[i], listElem[0]
 if listElem != preList: #處理重復(fù)情況
 result.append(''.join(listElem))
 listElem[0], listElem[i] = listElem[i], listElem[0]
 return result

如果使用+方法:

def swap(newElem, Elem):
 result = []
 listElem = list(Elem)
 listElem.insert(0, newElem)
 #result.append(''.join(listElem))
 result += ''.join(listElem)
 for i in range(1, len(listElem)):
 preList = listElem[:] # 注意這個(gè)地方
 listElem[0], listElem[i] = listElem[i], listElem[0]
 if listElem != preList: # 處理重復(fù)情況
  #result.append(''.join(listElem))
  result += ''.join(listElem)
 listElem[0], listElem[i] = listElem[i], listElem[0]
 return result
print(swap('1', '234'))
>>>>['1', '2', '3', '4', '2', '1', '3', '4', '3', '2', '1', '4', '4', '2', '3', '1']

遞歸調(diào)用函數(shù)

這個(gè)地方要用+號(hào),因?yàn)槭羌由厦看握{(diào)用的結(jié)果list(有多個(gè)元素),而不能append

def recurtionPermutation(self, ss, index):
 result = []
 if index == 0:
 result.append(ss[0])
 else:
 previousList = self.recurtionPermutation(ss, index - 1)
 newElem = ss[index]
 #print(previousList)
 for Elem in previousList:
 result += self.swap(newElem, Elem) #這里返回的是一個(gè)數(shù)組,數(shù)組加數(shù)組使用+,數(shù)組加元素使用append符號(hào)
 return result

按照字典排序

這里我按照冒泡字典排序,實(shí)際上沒(méi)有必要,比較字符大小直接可以用sorted函數(shù)。

sorted函數(shù)又方便又高效

def BubbleSortByDic(self, result):
 for i in range(len(result)):
 for j in range(len(result) - 1, i, -1):
 if result[j] < result[i]:
  result[i], result[j] = result[j], result[i]
 return result

AC代碼:

class Solution:

 def swap(self, newElem, Elem):
 result = []
 listElem = list(Elem)
 listElem.insert(0, newElem)
 result.append(''.join(listElem))
 for i in range(1, len(listElem)):
  preList = listElem[:] #注意這個(gè)地方
  listElem[0], listElem[i] = listElem[i], listElem[0]
  if listElem != preList: #處理重復(fù)情況
  result.append(''.join(listElem))
  listElem[0], listElem[i] = listElem[i], listElem[0]
 return result
 def recurtionPermutation(self, ss, index):
 result = []
 if index == 0:
  result.append(ss[0])
 else:
  previousList = self.recurtionPermutation(ss, index - 1)
  newElem = ss[index]
  #print(previousList)
  for Elem in previousList:
  result += self.swap(newElem, Elem) #這里返回的是一個(gè)數(shù)組,數(shù)組加數(shù)組使用+,數(shù)組加元素使用append符號(hào)
 return result
 # def BubbleSortByDic(self, result):
 # for i in range(len(result)):
 #  for j in range(len(result) - 1, i, -1):
 #  if result[j] < result[i]:
 #   result[i], result[j] = result[j], result[i]
 # return result
 def Permutation(self, ss):
 # write code here
 if ss == '':
  return []
 #return self.BubbleSortByDic(self.recurtionPermutation(ss, len(ss) - 1))
 return sorted(self.recurtionPermutation(ss, len(ss) - 1))
print(Solution().Permutation('acdfb'))

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門(mén)與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python交互模式基礎(chǔ)知識(shí)點(diǎn)學(xué)習(xí)

    python交互模式基礎(chǔ)知識(shí)點(diǎn)學(xué)習(xí)

    在本篇內(nèi)容里小編給大家整理的是關(guān)于python交互模式是什么的相關(guān)基礎(chǔ)知識(shí)點(diǎn),需要的朋友們可以參考下。
    2020-06-06
  • Python的numpy庫(kù)下的幾個(gè)小函數(shù)的用法(小結(jié))

    Python的numpy庫(kù)下的幾個(gè)小函數(shù)的用法(小結(jié))

    這篇文章主要介紹了Python的numpy庫(kù)下的幾個(gè)小函數(shù)的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Pytorch?和?Tensorflow?v1?兼容的環(huán)境搭建方法

    Pytorch?和?Tensorflow?v1?兼容的環(huán)境搭建方法

    這篇文章主要介紹了搭建Pytorch?和?Tensorflow?v1?兼容的環(huán)境,本文是小編經(jīng)過(guò)多次實(shí)踐得到的環(huán)境配置教程,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • Django利用AJAX技術(shù)實(shí)現(xiàn)博文實(shí)時(shí)搜索

    Django利用AJAX技術(shù)實(shí)現(xiàn)博文實(shí)時(shí)搜索

    這篇文章主要介紹了Django如何利用AJAX技術(shù)實(shí)現(xiàn)博文實(shí)時(shí)搜索,幫助大家更好的理解和學(xué)習(xí)使用Django框架,感興趣的朋友可以了解下
    2021-05-05
  • Python魔術(shù)方法深入分析講解

    Python魔術(shù)方法深入分析講解

    所謂魔法函數(shù)(Magic Methods),是Python的?種?級(jí)語(yǔ)法,允許你在類(lèi)中?定義函數(shù)(函數(shù)名格式?般為_(kāi)_xx__),并綁定到類(lèi)的特殊?法中。?如在類(lèi)A中?定義__str__()函數(shù),則在調(diào)?str(A())時(shí),會(huì)?動(dòng)調(diào)?__str__()函數(shù),并返回相應(yīng)的結(jié)果
    2023-02-02
  • Python多任務(wù)版靜態(tài)Web服務(wù)器實(shí)現(xiàn)示例

    Python多任務(wù)版靜態(tài)Web服務(wù)器實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了Python靜態(tài)Web服務(wù)器多任務(wù)版實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Python繪圖實(shí)現(xiàn)臺(tái)風(fēng)路徑可視化代碼實(shí)例

    Python繪圖實(shí)現(xiàn)臺(tái)風(fēng)路徑可視化代碼實(shí)例

    這篇文章主要介紹了Python繪圖實(shí)現(xiàn)臺(tái)風(fēng)路徑可視化代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • PyTorch中可視化工具的使用

    PyTorch中可視化工具的使用

    本文主要介紹了PyTorch中可視化工具的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Python函數(shù)中apply、map、applymap的區(qū)別

    Python函數(shù)中apply、map、applymap的區(qū)別

    這篇文章主要介紹了 Python函數(shù)中apply、map、applymap的區(qū)別 ,文章圍繞 Python函數(shù)中apply、map、applymap的相關(guān)資料展開(kāi)詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • Python檢測(cè)兩個(gè)文本文件相似性的三種方法

    Python檢測(cè)兩個(gè)文本文件相似性的三種方法

    檢測(cè)兩個(gè)文本文件的相似性是一個(gè)常見(jiàn)的任務(wù),可以用于文本去重、抄襲檢測(cè)等場(chǎng)景,Python 提供了多種方法來(lái)實(shí)現(xiàn)這一功能,x下面小編就來(lái)簡(jiǎn)單介紹一下吧
    2025-03-03

最新評(píng)論

保定市| 湟源县| 石门县| 肃南| 瑞昌市| 苍梧县| 白山市| 承德市| 延边| 同仁县| 南丰县| 崇阳县| 扎鲁特旗| 武城县| 醴陵市| 奈曼旗| 从化市| 黄大仙区| 南郑县| 宿州市| 阜康市| 七台河市| 北海市| 彭山县| 渭源县| 黄石市| 汨罗市| 蒲城县| 织金县| 平昌县| 上思县| 梁河县| 米易县| 泸西县| 江北区| 平度市| 龙岩市| 河曲县| 托里县| 抚顺县| 城口县|