Python小技巧

进制转换

可参考另一篇博客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}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值