进制转换
可参考另一篇博客python数字转换
其他进制数转换为十进制
# 二进制转换十进制
int('1100', 2) # 12
# 八进制转换十进制
int('30', 8) # 24
# 16进制转换十进制
int('ac9', 16) # 2761
给字符串前面补0:
n = "123"
s = n.zifll(5)
assert n == "00123"
也可以给负数补0:
n = "-123"
s = n.zifll(5)
assert n == "-0123"
对于纯数字,我们也可以通过格式化的方式来补0:
n = "123"
s = "%05d" % n
assert n == "00123"
斐波纳契数列
斐波纳契数列是一个很经典的数列,其通项公式为第一项和第二项都为 1,从第三项开始,每一项都等于前两项之和。
fibonacci = lambda x: x if x <= 1 else fibonacci(x - 1) + fibonacci(x - 2)
fibonacci(15) # 610
快速排序
quick_sort = lambda arr: arr if len(arr)<=1 else quick_sort([x for x in arr[1:] if x < arr[0]]) + [arr[0]] + quick_sort([x for x in arr[1:] if x>=arr[0]])
# 展开
def quick_sort(arr):
if len(arr) <= 1:
return arr
else:
arr_l=[]
arr_r=[]
for x in arr[1:]:
if x<arr[0]:
arr_l.append(x)
else:
arr_r.append(x)
return quick_sort(arr_l)+arr[0]+quick_sort(arr_r)
quick_sort([18, 20, 12, 99, 200, 59, 66, 34, 22])
# [12, 18, 20, 22, 34, 59, 66, 99, 200]
写入文件
文件操作也是常用操作之一,但你见过用print
函数写入文件的吗?
print("Hello,Python!", file=open('file.txt', 'w'))
字母异位词
通过交换单词中字母顺序,两个单词最终是一样的。
from collections import Counter
s1, s2 = 'apple', 'orange'
'anagram' if Counter(s1) == Counter(s2) else 'not an anagram'
# 'not an anagram'
矩阵转换
arr = [[1,2,3],[4,5,6],[7,8,9]]
res = [list(x) for x in zip(*arr)]
# [[1,4,7],[2,5,8],[3,6,9]]
*
:解包运算符,zip
:将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
字典数
import string
string.ascii_lowercase # 'abcdefghijklmnopqrstuvwxyz'
string.ascii_uppercase # 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.digits # '0123456789'
列表降维
在对接外部接口或者数据处理时,嵌套列表是非常常见的数据结构,但显然整合成一个列表更容易处理。
arr = [[1,2,3],[4,5,6],[7,8,9]]
res = [item for sub in arr for item in sub]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
推导式
上文中其实已多次使用推导式方法简化代码,这里来创建列表和字典:
arr = [num for num in range(10)] # [1, 2, 3, 4, 5, 6, 7, 8, 9]
num_set = {num for num in range(10)} # {1, 2, 3, 4, 5, 6, 7, 8, 9}
num_dict = {x: x*x for x in range(1,5)} # {1:1, 2:4, 3:9, 4:16}