Python刷题实用小tips集合(持续更新)

一些python的常用技巧,学会了非常方便实现一些基本功能
强推
9.全排列
12.异或
15.互换矩阵行列

内容导航:

  • 1. 哈希表 定义:
  • 2. map函数
  • 3. ord和chr
  • 4. 范围限制的32字节的字符串数字一行代码输出
  • 5. 二维矩阵的转置(运用zip的一行代码)
  • 6. 二维矩阵的快速初始化
  • 7. 二维矩阵的快速list化
  • 8. 双向队列的默认实现
  • 9. 快速全排列罗列
  • 10. 找到字典中值最大的键
  • 11. 统计list中数出现的数量
  • 12. 异或的一些骚操作
  • 13. 关于递归的理解(知乎转载)
  • 14.filter函数过滤掉数组中的部分元素
  • 15.二维矩阵中的行列互换,增删
  • 16.右移一位和除二操作的关系


1. 哈希表 定义:

dict = {},python中叫做字典,查值出键

  1. 必须键和值对应,成对出现,
  2. 重复出现的键会被后续出现的值代替

判断是否在字典中,可以使用关键字in进行组合,例如:
if a in dict:

详细参考https://www.cnblogs.com/scios/p/8108243.html


2. map函数

用来将一个函数映射到一个集合上去

def f(x):
    return x*x
print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

结果是:[1, 4, 9, 10, 25, 36, 49, 64, 81]

详细参考https://www.cnblogs.com/lincappu/p/8179475.html


3. ord和chr

ord用于得到单个字符ASCII码值
chr用于得到ASCII码值对应的字符

>>> ord('d')
100

>>> chr(100)
'd'

详细参考https://blog.csdn.net/hk_john/article/details/77990585


4. 范围限制的32字节的字符串数字一行代码输出

return max(-2 ** 31, min(sign * ret, 2 ** 31 - 1))

5. 二维矩阵的转置(运用zip的一行代码)

return list(map(list,zip(*array)))

6. 二维矩阵的快速初始化

# dim1, dim2是二维矩阵的第一第二维度,初始化为0,改成其他数则全为其他数
aarray = [ [0] * dim1 for i in range(dim2)]

7. 二维矩阵的快速list化

# 第一种:导入外部的包
from itertools import chain
list(chain(*res))

# 第二种:二重循环
>>>ab = [[1,2,3], [5,8], [7,8,9]]
>>>print([i for item in ab for i in item])
[1, 2, 3, 5, 8, 7, 8, 9]

8. 双向队列的默认实现

# 好处是多了leftappend这个属性,2019年腾讯提前批笔试就考察了这个数据结构
import collections
d = collections.deque()

9. 快速全排列罗列

感谢我即将去字节跳动实习的好哥们儿给的好东西,非常实用,放上他的博客地址,具体各位可以在各个公司的面试题需要暴力破解的时候感受到全排列的方便,建议mark

# 给出list:123,返回这三个数的全排列
# list和map的组合用法是将内部的tuple变成数组形式方便使用
>>>import itertools
>>>result = list(map(list, itertools.permutations([1,2,3])))
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]

10. 找到字典中值最大的键

# 第一种,直接返回
res = max(d,key=d.get)
# 第二种,对字典按照键排序
# 这里的d.items()实际上是将d转换为可迭代对象
# items()方法将字典的元素 转化为了元组
# 而这里key参数对应的lambda表达式的意思则是选取元组中的第二个元素作为比较参数
# lambda x:y中x表示输出参数,y表示lambda 函数的返回值
d = sorted(d.items(), key=lambda item: item[1])
res = d[-1][0]

11. 统计list中数出现的数量

# most_common(列出前n个元素,不指定参数,则列出所有)
>>>numbers = [1,2,3,2,4,2,5,2,3]
>>>from collections import Counter
>>>count = Counter(numbers).most_common()
[(2, 4), (3, 2), (1, 1), (4, 1), (5, 1)]


12. 异或的一些骚操作

1.基本性质

0 ^ n = n
n ^ n = 0

2.三次异或交换两个数

>>>a, b = 1, 2
>>>a = a ^ b
>>>b = a ^ b
>>>a = a ^ b
>>>print a, b
2 1

13. 关于递归的理解(知乎转载)

看到过查字典的比喻挺好的。想象用一本纯英文词典查单词,要查某一个单词的意思,翻到这个单词时,看解释,发现解释中有一个单词不认识,所以,无法明白这个要查的单词是什么意思;这时,再用这本词典(函数本身)查那个不认识的单词,又发现查的第2个单词的解释中又有一个单词不认识,那么,又再用这本词典查第3个不认识的单词,这样,一个一个查下去,直到解释中所有单词都认识,这样就到底了,就明白了最后一个单词是什么意思,然后一层一层倒回来,就知道我最初想查的第1个单词是什么意思了,问题就解决了。

作者:李oo
链接:https://www.zhihu.com/question/31412436/answer/77766824
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


14.filter函数过滤掉数组中的部分元素

def is_odd(n):
    return n % 2 == 1
 
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)
# 输出:1,3,5,7,9

15.二维矩阵中的行列互换,增删

借助numpy数组可以轻松实现该功能,避免繁琐操作,
为了后续操作方便,推荐使用子方法.tolist()将ndarray转换为ist类型

import numpy as np
array = np.array([[1,2,3], [4,5,6],[7,8,9]])
# 交换1,3列
array = array[:,[2,1,0]]
# 增加一行或一列
array = np.row_stack((array, [7,8,9]))
array = np.column_stack((array, [7,8,9]))

16.右移一位和除二操作的关系

简要总结一下:
应该说成非负数除二是向下取整,整数除二是向零取整。
大部分情况下两者等价
启蒙的地址
详细证明的地址

你可能感兴趣的:(学习笔记)