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

目录

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

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


哈希表 定义:

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

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

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

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


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


ord和chr

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

>>> ord('d')
100

>>> chr(100)
'd'

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


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

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

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

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

二维矩阵的快速初始化

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

二维矩阵的快速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]

双向队列的默认实现

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

快速全排列罗列

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

找到字典中值最大的键

# 第一种,直接返回
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]

统计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)]

异或的一些骚操作

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

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

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

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


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

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

借助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]))

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

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

原文地址:https://www.cnblogs.com/kouin/p/11455721.html

时间: 2024-10-03 22:28:58

Python刷题实用小tips集合(持续更新)的相关文章

php实用小技巧【持续更新】

这是本人开始做项目的时候遇到过的问题还有解决方法 1.eval函数 能把字符串转换成可执行的php代码,如果字符串不是可执行的php代码的话,需要在前面加上@,屏蔽notice 2.array_merge函数 array_merge函数是用来合并数组的,本人之前遇到过一个需求 把arr_1在arr_2中的键值匹配到的键值替换成arr_2的值 这时就可以用array_merge,因为关联数组合并后面数组会替换前面数组的同命键值

python tips(持续更新)

1. 引用上一层目录 import syssys.path.append('..')import xx 2. python json JSON是一种轻量级的数据交换格式.可以解决数据库中文存储问题,对象序列化问题,等等. import json encodedjson = json.dumps(obj) decodejson = json.loads(encodedjson) 非常简单. 3. 静态方法 在函数前面@staticmethod @staticmethod def func(): p

[VisualStudio]_[VS实用插件集合*持续更新]

场景: 1. 有些插件对提高效率是必要和必需的. 吐槽下:微软的程序员如何解决以下问题的?不用插件. 1. 快速打开文件,文件多之后VS只能通过鼠标点击 "解决方案资源管理器" 来双击打开文件,效率很低.这个插件可以通过快捷键CTRL+K,CTRL+O来打开指定的文件,支持文件名模糊匹配. 下载地址:  http://visualstudiogallery.msdn.microsoft.com/3eb2f230-2728-4d5f-b448-4c0b64154da7 vs2012的没试

C#小常识,持续更新..

1.cs部分添加隐藏样式IntegratedEquipmentblock.Style.Add("display", "none"); 2.gridview添加奇偶行样式 protected void gvIntegratedEquipmentList_RowDataBound(object sender, GridViewRowEventArgs e) { //添加样式-----------begin switch (e.Row.RowType) { case Da

【原创】实用API拾遗_持续更新

1.int android.widget.AbsListView.pointToPosition(int x, int y):将坐标映射成list位置序号!!    2014.08.08 Maps a point to a position in the list. Parameters: x X in local coordinate y Y in local coordinate Returns: The position of the item which contains the spe

Python·Jupyter Notebook各种使用方法记录·持续更新

Python·Jupyter Notebook各种使用方法记录·持续更新 你为什么使用 jupyter 原文地址:https://www.cnblogs.com/lhuser/p/8446420.html

git使用技巧集合(持续更新中)

git使用技巧集合(持续更新中) 在团队协作中,git.svn等工具是非常重要的,在此只记录一些git使用过程中遇到的问题以及解决方法,并且会持续更新. 1.git commit之后,还没push,如何撤销? 答:使用命令git reset --soft HEAD^即可,尽量不要使用命令git reset --hard HEAD,因为这样撤销是非常彻底的,本地文件也会删除(HEAD是指向最新的提交,上一次提交是HEAD^,上上次是HEAD^^,也可以写成HEAD-2 ,依次类推) 原文地址:ht

Python刷题之路,怎样做才能让技术突飞猛进

比你优秀的人比你还努力 这个世界最可悲的就是 , 比你优秀的人比你还努力 偶然的机会,通过Python认识了一位华为的文职工作人员.起初只是问我,Python初学者看什么书能快速入门.而两个月过后,她已经开始每天在Leecode上刷题了.虽然有时半夜微信收到她刷题刷到崩溃的消息,或者针对部分Python语法的疑问,但作为一位文职大厂的优秀员工,她却比很多本该靠着代码吃饭的人更为努力. 今天这篇文章,就写给那些希望学习Python,但在刷题路上迷茫或者找不到方向的朋友们.文章仅代表个人观点,不喜勿

本人用python刷题时的错误总结

本人新手,在leetcode刷题过程中出现过很多问题,故在此总结,不定时更新. 1.在创建一个二维列表的时候,我之前会用 a = [[0] * 5] * 5, 但是这样输出的结果往往会跟期待的不一样,我一直以为是我的程序有问题,百度了很久也不知道错误在哪儿,后来看见别人的解法,自己换了一个创建并初始化列表的代码,结果就可以运行了,出错的原因就是:[[]]是一个含有一个空列表元素的列表,所以[[]]*3表示3个指向这个空列表元素的引用,修改任何一个元素都会改变整个列表.所以我现在常用的方法就是用列