Python面試基礎 演算法題精講

2022-09-23 04:02:13 字數 2975 閱讀 5653

第一題

def accum(s):

# tod

pass

# accum("abcd") => "a-bb-ccc-dddd"

# accum("cwat") => "c-ww-aaa-tttt"

這到題用到了字串的字母大寫、小寫、字串拼接、複製。用到的函式有 join 將列表中的內容按照指定字元連線成一個字串,

具體**:

def asuum(s):

return '-'.join(y.upper() + y.lower()* x for x,y in enumerate(s))

a = asuum('abcd')

print(a)

第二題def duplicate_count():

# todo

pass

# 實現將一串字串返回該字串有重複的的字母個數包括大小

# test.assert_equals(duplicate_count("abcde"), 0)

# test.assert_equals(duplicate_count("abcdea"), 1)

# test.assert_equals(duplicate_count("indivisibility"), 1)

這裡用到了將所有字母都轉成小寫還有集合,和列表

具體**:

第三題def descending_order(num):

# todo

pass

# descending_order(21445) => 54421

# descending_order(145263) => 654321

# descending_order(1254859723) => 9875543221

具體**:

def descending_order(num):

return int("".join(sorted(str(num), reverse=true)))

第四題def error_printer(s):

# todo

pass

# s="aaabbbbhaijjjm", error_printer(s) => "0/14"

# s="aaaxbbbbyyhwawiwjjjwwm", error_printer(s) => "8/22"

# 計算字串有多少個在'abcdefghijkmlm'裡

具體**:

from re import sub  

def printer_error(s):  

return "{}/{}".format(len(sub("[a-m]",'',s)),len(s))

我們講一下sub 的用法

re.sub共有五個引數。

re.sub(pattern, repl, string, count=0, flags=0)

其中三個必選引數:pattern, repl, string

兩個可選引數:count, flags

pattern,表示正則中的模式字串,這個沒太多要解釋的。

repl,就是replacement,被替換,的字串的意思。

repl可以是字串,也可以是函式。

repl是字串

如果repl是字串的話,其中的任何反斜槓轉義字元,都會被處理的。

\n:會被處理為對應的換行符; 

\r:會被處理為回車符; 

其他不能識別的轉移字元,則只是被識別為普通的字元: 

比如\j,會被處理為j這個字母本身; 

反斜槓加g以及中括號內一個名字,即:\g,對應著命名捕獲

string,即表示要被處理,要被替換的那個string字串。

第五題def expanded_form(num):

# todo

pass

# expanded_form(12) => '10 + 2'

# expanded_form(42) => '40 + 2'

# expanded_form(70304) => '70000 + 300 + 4'

具體**:

第六題def order_weight(s):

# todo

pass

# 計算每一個數字的累加和

# order_weight("2000 10003 1234000 44444444 9999 11 11 22 123") => "11 11 2000 10003 22 123 1234000 44444444 9999")

# 2000就是2, 10003就是4, 也就是這串數字的累加和

具體**:

def order_weight(s):  

return ' '.join(sorted(sorted(s.split(' ')),key = lambda x:sum(int(c) for c in x)))

首先把這個數進行切割,然後用lambda算出這個數的累加和,在根據累加和進行排序。

第七題def valid_parentheses(s):

# todo

pass

# "()" => true

# ")(()))" => false

# "(" => false

# "(())((()())())" => true

# 判斷是否是有效空號對

具體**:

def valid_parentheses(string):  

cnt = 0  

for i in string:  

if i == "(":

cnt+=1  

if i == ")":

cnt-=1  

if cnt < 0:

return false  

return true if cnt == 0 else false

檢測到一個左括號就壓棧,檢測到一個右括號就出棧,最後檢查棧,若還有元素則false,沒有則true。

所有**都已上傳:

python 遺傳演算法精簡版

精簡版遺傳演算法,演算法中僅採用變異運算元而沒有使用交叉運算元,但是進化依然很有效 from string import ascii low...