Python常见算法记录
最近在准备华为软件岗的面试,发现对python还是挺不熟悉的,打算长期更新一个错题本来记录我犯过的错误。
列表的两种遍历方式
for index,value in enumerate(list1):
for i in list1:
第一种用了枚举,可以访问到interesting类型的index和str型的value。
第二种直接遍历整个列表,i就是str型的列表内容。
ASCII的转换方式
ascii = ord("a")-32
Cap = chr(ascii)
print(ascii)
print(Cap)
上面代码的输出结果为65和A
python内置了ord()字符转ACII码和chr()ASCII码转字符,记得ASCII小写在前,减去32就好了。
排序
def bubble(string):
for i in range(len(string)-1):
for j in range(len(string)-1):
if string[j] > string[j+1]:
mid = string[j+1]
string[j+1]=string[j]
string[j]=mid
return string
直接使用快排应该在大多数场合都没问题的,冒泡排序和鸡尾酒排序在这个基础上加上swapped就可以了。不过算法太久没翻过了,本能第一反应只能写出快排,有时间补上另外几种常用排序。
整除
times = int(len(string)/8)
python中的除法有时候除出来是浮点数,这里没注意很容易报错,所以加上一个int类型转换保险一点。
进制转换
while True:
try:
print(int(input(),16))
except:
break
一道进制转换的题,直接int进制转换秒杀。这算是python3的奇技淫巧吧,int就内置了常用的八进制二进制十六进制转换了。用法是:
#后面的参数是几就接受几进制的数
print(bin(int("25",10)))#10->2
print(oct(int("25",10)))#10->8
print(hex(int("25",10)))#10->16
print(int("0xA",16))#16->10
print(int("1001",2))#2->10
四舍五入
一般python3中用round()做为四舍五入的处理函数,但是其实round()并不是四舍五入,具体来说应该是四舍六入五平分。跟我们平常用的不一样,所以要自己构建四舍五入的函数。其实也不难,只需要判断小数点后面那位是不是五就可以了,其他情况还是可以用round()的。
string = input()
first = string.find('.')+1
if int(string[first]) == 5:
print(int(float(string)+0.5))
else:
print(round(float(string)))