做牛客网题目的时候发现不少奇奇怪怪的用法:
print(ord("a")) # ascii嘛 print(chr(ord("a") + 1)) # 转到下一位字母 print("123".isdigit()) # 如果字符串只包含数字则返回 True 否则返回 False print("ddd".isalpha()) # 如果字符串只包含字母则返回 True 否则返回 False print(''.join(reversed("123"))) # 反转,reversed返回是一个迭代对象 print(list(reversed([1, 2, 3]))) print(sorted([3, 6, 2, 4], reverse=False)) # 排序,reverse默认是false,升序排列 a = [{"name": "Taobao", "age": 100}, {"name": "Runoob", "age": 7}, {"name": "Google", "age": 100}, {"name": "Wiki", "age": 200}] print(sorted(a, key=lambda i: i['name'], reverse=False)) # key是指排序规则,这里的i是a下面每个字典 print(" sdsdkksdsew a".strip('a')) # 移除字符串头尾指定的字符(默认为空格或换行符)或字符序列 print([1, 2, 4, 5].pop(1)) # pop默认删除最后一位,可以删除指定位置 print(bin(15)) # 10进制转换为2进制 print(int("0xAA", base=16)) # 16进制转换为10进制(其他进制转化为10进制)
1、冒泡排序和快速排序
def maopaopaixu(a): for i in range(len(a) - 1): # 这个循环负责设置冒泡排序进行的次数 # 第一次排就能把最大的排到最后面,最后一个就不参与排序了 # 第二次排需要的次数-1,能把第二大的排到倒数第二,倒数第二个就不参与排序了 # 同理第三次、第四次 for j in range(len(a) - i - 1): # j为列表下标 if a[j] > a[j + 1]: a[j], a[j + 1] = a[j + 1], a[j] return a def quick_sort(data): """快速排序""" if len(data) >= 2: # 递归入口及出口 mid = data[len(data) // 2] # 选取基准值,也可以选取第一个或最后一个元素(//取整除 - 返回商的整数部分(向下取整)) left, right = [], [] # 定义基准值左右两侧的列表 data.remove(mid) # 从原始数组中移除基准值,如果不移除,list含有相同元素时则会陷入无限递归 for num in data: if num >= mid: right.append(num) else: left.append(num) return quick_sort(left) + [mid] + quick_sort(right) # return quick_sort(left) + quick_sort(right) else: return data if __name__ == '__main__': a = [2, 1, 4, 5, 10, 11, 21, 34, 6, 6] print(maopaopaixu(a)) print(quick_sort(a))
2、阶乘
def funa(a: int): if a < 1: print("数据错误") return if a == 1: return 1 if a > 1: return a * funa(a - 1) def funb(a: int): l = 1 for i in range(1, a + 1): l = l * i return l if __name__ == '__main__': print(funa(6)) print(funb(6))
3、反转
def fanzhuan1(a): if isinstance(a, str): l = '' for i in range(len(a)): l = l + a[-(i + 1)] return l if isinstance(a, list): l = [] for i in range(len(a)): l.append(a[-(i + 1)]) return l def fanzhuan2(a): return a[::-1] if __name__ == '__main__': a = "ksjdkjsd" print(fanzhuan1(a)) print(fanzhuan2(a)) a = [1, 2, 3, 4, 5] print(fanzhuan1(a)) print(fanzhuan2(a))
4、数组移除元素,remove会删掉元素,导致后面的元素下标前移,实际上5和-6没有参与循环
def dellist1(a: list): for i in a: if i < 0: a.remove(i) return a def dellist2(a: list): return [i for i in a if i > 0] if __name__ == '__main__': a = [1, 3, -3, 5, -4, -6, 10] print(dellist1(a)) # [1, 3, 5, -6, 10] print(dellist2(a)) # [1, 3, 5, 10]
5、字符串统计
str001 = "my love is you do you konw it ? do you love me ?" list001 = str001.split(' ') print(list001) print(str001.count(' ')) print("单词的总数为%s" % (len(list001))) # 14 print("空格的总数为%s" % str001.count(' ')) # 13 print("you的总数为%s" % (list001.count('you'))) # 3
6、斐波拉契数列
# 一般来说这个数列的入参是len # 0、1、1、2、3、5、8、13、21、34 def feb(len: int): l = [0, 1] if len < 2: l = [0, 1] for i in range(len - 2): l.append(l[-1] + l[-2]) return l def feb2(a): """这个只能取单个""" if a == 2: return 1 if a == 1: return 0 else: return feb2(a - 1) + feb2(a - 2) if __name__ == '__main__': print(feb(6)) print(feb2(6))
7、去重
def mydemo(a): for i in a: len = a.count(i) while len > 1: a.remove(i) len = a.count(i) return a def setdemo(a): if isinstance(a, str): return ''.join(set(b)) if isinstance(a, list): return list(set(a)) if isinstance(a, tuple): return tuple(set(a)) if __name__ == '__main__': a = [1, 2, 3, 1, 4, 6, 7, 3, 2] b = 'sjhdkshdksssd' c = (1, 2, 3, 1, 4, 6, 7, 3, 2) print(mydemo(a)) print(setdemo(a)) print(setdemo(b)) print(setdemo(c))
8、求质数,美团视频面试第一道题,就挂了,是我自己想的太简单
# c=0 # for i in range(101,201): # d = 0 # for j in range(2,i): # if i%j==0: # d+=1 # break # if d==0: # c=c+1 # # print(c) c=0 for i in range(101,201): for j in range(2,i): if i%j==0: break else: c=c+1 print(c)
for else语句:当 for 所有的语句代码块正常运行完,才会运行 else 语句