Python Notes
python相关
- python 转二进制:output = “{0:b}”.format(int_value); bs = “1010” int_value = int(bs, 2) 注意, // 符号是取整
- python中,round(4.5)=4, round(4.51)=5, int(4.7)=4, int(4.3)=4,int()可以实现向下取整 7//2=3, 5//2=2
- 在python中,整数除法是向下取整的,而不是向0取整,比如-3/2 = -2
- 可以使用int(num1 / float(num2)), 这时int(-3 / float(2)) = -1
- str1[::-1] 可以反转原字符串str1,可以用来判断回文序列,或者也可以使用双指针来判断
- 数组插入方法:insert(index, element),在数组头部进行插入,就是insert(0, value)
- 使用如下语句进行递增排序:data = sorted(data, key= lambda x:x)
- 使用data = sort(key = lambda x:(-x[0], x[1])), 是可以对一个元组进行排序,当x[0]相同的时候,就对x[1]进行增序排序,当x[0]不相同的时候,对x[0]进行降序排序,因为有个负号
- 同时遍历数组中每一个元素的下标和值: for index, value in enumerate(data), index为下标,value为值
- python中dict()是一个字典,储存[key, value]类型的键值对,可以快速查找
- 使用方法:my_dict = {}, my_dict[‘key1’] = 1, my_dict[‘key2’] = 2
- 通过my_dict.get(‘key1’) is None 来判断键是否存在,或者if ‘key1’ in my_dict
- 遍历:for key, value in my_dict.items(), for key in my_dict:, for value in my_dict.values():
- my_dict.get(key, 0)可以在字典中查找key,若没找到,就返回默认值0
- 删除字符串中的写法:string = string.replace(“IX”, “”)
- 在python中,调用递归函数:self.func()
- 在python中,调用一个类中的函数,要使用self.function(parameter)的格式
- 要灵活运用python中类似表达式:list = [int(digit) for digit in int(int_value)] // list = [ [0] for _ in range(numRows)]
- ord(‘a’) = 97, 代表a的ASCII编码,ord(‘b’) = 98, chr(98) = ‘b’
- 注意Python中自带的一些函数,如zip()函数相关的打包和解压*操作,list(), set()函数等
- 对于第一个节点是空节点的链表,遍历:while current.next is not None: print(current.next.val) current = current.next。正好可以访问全部链表,而已避免访问了头结点
- 同时,在单链表中,可以使用虚拟的头结点,比如dummy_head = Listnode(0, head),然后就可以使用上面的方法进行遍历,同时还能避免访问虚拟的头结点
- python中的set()代表一个集合,表示无序不重复的序列,set的作用可以用来给数据去重
- 创建:my_set = set(), my_set = set((1, 2, 3, 4, 1))
- 使用减号可以求两个set的差集,
- 增删改查:当向set插入一个字符串,会进行拆分,拆为单个字母。有add(), update()方法,remove()方法
- python中的栈
- 可以使用stack = [], 进栈append(), 出栈pop()
- python中的队列
- 使用import collections, queue = collections.deque()来进行实现
- 入队append(), 出队queue.popleft()
- python的heapq类
- 默认是小根堆,含有heappush,heappop等方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19heap = []
arr = [1, 2, 3, 4]
heapq.heappush(heap, arr[i])
heapq.heapify(arr) # 直接将一个列表变为一个小根堆,直接进行了堆排序
heapq.heappop(heap) # 弹出一个元素,最小堆弹出最小的
```
- 可以用小根堆来构建大根堆,即插入负数
```python
import heapq
heap_min=[1,4,2,3,5]
heapq.heapify(heap_min)
heap_max = [(-i, heap_min[i]) for i in range(len(heap_min))]
print(heap_max,'插入负数后的小根堆')
heapq.heapify(heap_max) #以插入的负数做小根堆,越大的数字插入的负数就越小,所以这样就相当于做了大根堆, 此时已经按照第一个值变成了小顶堆,即变成了逆序
max_heap = list()
while heap_max:
_, value = heapq.heappop(heap_max) #删除并返回 newl中的最小元素
max_heap.append(value)
print(max_heap,'输出的大根堆')
- 默认是小根堆,含有heappush,heappop等方法
- 在python一个函数内部写函数的写法:
1
2
3
4
5def func1(self, root):
def func2(root):
do something
func2(root) - 在递归函数中
1
2
3
4
5
6# 如果像下面这么写是不对的
if k == 0:
self.result.append(temp_result)
# 应该修改为
self.result.append(temp_result[:])
# 像第一种写法,添加的是temp_result的一个引用,而[:]添加的是一个副本 - ASCII中,0到9的号码是从48-57。大写A到大写Z的号码从65-90,小写a到小写z的号码从97-122。数字比字母都要小,大写字母的序号 = 小写字母序号 - 32。
在c++中,大小写字符相互转换如下在Python中,大小写字符相互转换如下1
2
3
4char changeChar(char & a) { // 小写变大写
if (a >= 'a' && a <= 'z') a -= 32;
return a;
}1
2
3
4
5
6# upper() 转换大写
# lower() 转换小写
char = 'a'
print(char.upper())
char = 'A'
print(char.lower()) str.join(iterable)
是一个字符串方法,可以将可迭代对象(列表,元组)等连接为一个字符串,str是一个可分隔字符串,可以是'' or ' '
, iterable是一个包含需要连接的字符串元素的可迭代对象,用法如下1
2
3
4
5
6
7numbers = [1, 2, 3] # 连接非字符串元素,需要转换为字符串元素,join只能处理字符串类型
result = ', '.join(map(str, numbers)) # 输出1, 2, 3
result = ''.join(str(x) for x in range(5)) # 使用生成器表达方式
print(result) # 输出: '01234'
23. python常用最大值
```python
max_v = float('inf')