Python Notes

python相关

  1. python 转二进制:output = “{0:b}”.format(int_value); bs = “1010” int_value = int(bs, 2) 注意, // 符号是取整
  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
  3. str1[::-1] 可以反转原字符串str1,可以用来判断回文序列,或者也可以使用双指针来判断
  4. 数组插入方法:insert(index, element),在数组头部进行插入,就是insert(0, value)
  5. 使用如下语句进行递增排序:data = sorted(data, key= lambda x:x)
    • 使用data = sort(key = lambda x:(-x[0], x[1])), 是可以对一个元组进行排序,当x[0]相同的时候,就对x[1]进行增序排序,当x[0]不相同的时候,对x[0]进行降序排序,因为有个负号
  6. 同时遍历数组中每一个元素的下标和值: for index, value in enumerate(data), index为下标,value为值
  7. 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
  8. 删除字符串中的写法:string = string.replace(“IX”, “”)
  9. 在python中,调用递归函数:self.func()
  10. 在python中,调用一个类中的函数,要使用self.function(parameter)的格式
  11. 要灵活运用python中类似表达式:list = [int(digit) for digit in int(int_value)] // list = [ [0] for _ in range(numRows)]
  12. ord(‘a’) = 97, 代表a的ASCII编码,ord(‘b’) = 98, chr(98) = ‘b’
  13. 注意Python中自带的一些函数,如zip()函数相关的打包和解压*操作,list(), set()函数等
  14. 对于第一个节点是空节点的链表,遍历:while current.next is not None: print(current.next.val) current = current.next。正好可以访问全部链表,而已避免访问了头结点
    • 同时,在单链表中,可以使用虚拟的头结点,比如dummy_head = Listnode(0, head),然后就可以使用上面的方法进行遍历,同时还能避免访问虚拟的头结点
  15. python中的set()代表一个集合,表示无序不重复的序列,set的作用可以用来给数据去重
    • 创建:my_set = set(), my_set = set((1, 2, 3, 4, 1))
    • 使用减号可以求两个set的差集,
    • 增删改查:当向set插入一个字符串,会进行拆分,拆为单个字母。有add(), update()方法,remove()方法
  16. python中的栈
    • 可以使用stack = [], 进栈append(), 出栈pop()
  17. python中的队列
    • 使用import collections, queue = collections.deque()来进行实现
    • 入队append(), 出队queue.popleft()
  18. python的heapq类
    • 默认是小根堆,含有heappush,heappop等方法
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      heap = []
      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,'输出的大根堆')
  19. 在python一个函数内部写函数的写法:
    1
    2
    3
    4
    5
    def func1(self, root):
    def func2(root):
    do something

    func2(root)
  20. 在递归函数中
    1
    2
    3
    4
    5
    6
    # 如果像下面这么写是不对的
    if k == 0:
    self.result.append(temp_result)
    # 应该修改为
    self.result.append(temp_result[:])
    # 像第一种写法,添加的是temp_result的一个引用,而[:]添加的是一个副本
  21. ASCII中,0到9的号码是从48-57。大写A到大写Z的号码从65-90,小写a到小写z的号码从97-122。数字比字母都要小,大写字母的序号 = 小写字母序号 - 32。
    在c++中,大小写字符相互转换如下
    1
    2
    3
    4
    char changeChar(char & a) { // 小写变大写
    if (a >= 'a' && a <= 'z') a -= 32;
    return a;
    }
    在Python中,大小写字符相互转换如下
    1
    2
    3
    4
    5
    6
    # upper() 转换大写
    # lower() 转换小写
    char = 'a'
    print(char.upper())
    char = 'A'
    print(char.lower())
  22. str.join(iterable)是一个字符串方法,可以将可迭代对象(列表,元组)等连接为一个字符串,str是一个可分隔字符串,可以是'' or ' ', iterable是一个包含需要连接的字符串元素的可迭代对象,用法如下
    1
    2
    3
    4
    5
    6
    7
        numbers = [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')