本人也是第一次参加Python相应比赛,在此记录一下所不懂的和相应技巧!
1.在使用字典dict前统计字符串时别忘了count()
2.字典序: 字典序字典序是指按照字典中出现的先后顺序进行排序
3.若对字符串进行排序,可以将字符串转为列表后再排序
s = list(s)
s.sort()
4.找出字典的最大值:
l1 = max(my_dict.values()) 或者 l1 = max(my_dict.keys())
5.利用min或max函数可以迅速找到字符串中字典序最大或最小的字母:
a = ['c','b','a']
print(min(a)) # a
b = 'asd'
print(max(b)) #
6.Python中声明二维数组的正确方式应为
dp = [[0] * n for _ in range(m)]
# 用 dp = [[0]* n] * m 是错误的,会导致dp中的每行列表是同一个id
7.int()会向下取整而不是四舍五入,应该用 decimal()
from decimal import *
number = Decimal('1.125').quantize(Decimal('0.00'),rounding=ROUND_HALF_UP) # rounding=ROUND_HALF_UP 可以理解为到半向上取整
print(number) # 1.13
8.对于日期的计算因为闰年的存在变得比较麻烦,但是Python中存在datetime模块:
对于datetime库看优快云收藏夹!
import datetime
date = datetime.date(2022,10,13)
date3 = datetime.date(2022,10,23)
print(date, date.year, date.month) # 2022-10-13 2022 10
date1 = date + datetime.timedelta(days = -1) # 天数-1 代表昨天,但必须是datetime类型
date2 = date + datetime.timedelta(days = 1) # 天数+1 代表明天,但必须是datetime类型
x = date.__sub__(date3) # -10 days, 0:00:00 计算date - date3日期的差值
print(x)
9.对于输入格式为:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
这种三角形格式可以用以下输入
n = int(input())
dp = [list(map(int, input().split())) for i in range(n)]
10.考虑冒泡排序的复杂度,对于拥有N个字母的字符串,最多需要交换N*(N-1)/2次(完全乱序时)
11.对于输入格式为 1 3 6 9
my_list = list(map(int,input().split(" ")))
12.对于输入格式为 3 5 非列表
n, m = (int(x) for x in input().split(" "))
n,m = map(int,input().split())
13. clear只会清除列表,不会删除数值所在的地址空间,clear()会删除地址空间,导致这些值被清空无法存储
14.Python字符串:
str.lower() # 转小写
str.upper() # 转大写
str.capitalize() # 将字符串的第一个字母变成大写,其余字母变为小写
str.swapcase() # 将字符串str中的大小写字母同时进行互换
str.title() # 返回一个满足标题格式的字符串,即所有英文单词首字母大写,其余英文字母小写。
15. permutation()函数:
是可以对集合或字符串进行排序(不会去重,与combinations不同)
from itertools import permutations
b = [1,2,3] #对列表进行permutations排列组合
a = 'abc' #对字符串进行permutations排列组合
for j in permutations(b,3):
print (''.join('%d'%o for o in j)) # 123 132 213 231 312 321
for i in permutations(a,3):
x = ''.join(i)
print (x,end=' ') # abc acb bac bca cab cba
16.用.index可以快速定位要找字符的序号
17.zip()用法:
a = ['a', 'b', 'c', 'd']
b = ['1', '2', '3', '4']
list(zip(a, b)).print() # [('a', '1'), ('b', '2'), ('c', '3'), ('d', '4')]
# zip()返回的是一个tuple的迭代器,所以要list()转换为列表
18.在append内加入list可以将字符串逐个加入到数组中
x = 'asdasd'
arr = []
arr.append(list(x))
print(arr) # [['a', 's', 'd', 'a', 's', 'd']]
19.combinations()函数:
是可以对集合或字符串进行组合(会去重)
用法与permutations相同,下面说说不同点:
from itertools import combinations, permutations
data = [1,2,3,4]
for combination in combinations(data,2):
print(combination) # 会去重
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
for permutation in permutations(data,2):
print(permutation) # 不会去重
(1, 2)
(1, 3)
(1, 4)
(2, 1)
(2, 3)
(2, 4)
(3, 1)
(3, 2)
(3, 4)
(4, 1)
(4, 2)
(4, 3)
20.if 语句中 or 的使用
i= 0
if i == 1 or 5:
print(i)
'''
此时并非是判断i是否等于1或者5,而是(if i == 1) or (5):所以这个if判断语句前半段 i==1为false,
则继续判断后半句;后半段为5,此时5为非零,即为true。所以整体判断语句为true,则输出i。
'''
# 正确的写法为:
if i == (1 or 5):
print(i)
补充:
if (a or b) == 1:
print(i)
21.strip函数
1.删除多余空格:
str.strip():删除字符串前后(左右两侧)的空格或特殊字符。
str.lstrip():删除字符串前面(左边)的空格或特殊字符。
str.rstrip():删除字符串后面(右边)的空格或特殊字符。
str = " hello world \t\n\r"
str.strip() # 'hello world'
str.strip(" \r") # 'hello world \t\n'
str # ' hello world \t\n\r'
2.删除指定字符:
str = 'hello world'
print str.strip('heldo').strip() # wor 第二个strip是为了删除o和w之间的空格
22.二维列表的排序
score = [[1000, 90], [3239, 88], [2390, 95], [7231, 84], [1005, 95], [1001, 88]]
score.sort(key=lambda x:-x[1]) # 按照第二个元素从大到小排序,把'-'去掉即为从小到大
print(score) # [[2390, 95], [1005, 95], [1000, 90], [3239, 88], [1001, 88], [7231, 84]]
score.sort(key=lambda x:(-x[1],x[0])) # 按照第二个元素从大到小排序,再根据第一个元素从小到大排序
print(score) # [[1005, 95], [2390, 95], [1000, 90], [1001, 88], [3239, 88], [7231, 84]]
score.sort(key=lambda x:(x[0] * x[1])) # 按照小列表内的乘积从小到大排序
23.二分查找与二分答案法不同
二分答案: 即对你要求的答案进行二分
二分查找: 对一个已知的有序数据集上进行二分的查找
二分答案法使用场景:
典型的使用场景: 要求我们求出某种条件的最大值的最小可能情况或者最小值的最大情况
1. 答案在一个固定的区间内
2. 难以通过搜索来找到符合要求的值, 但给定一个值你可以很快的判断它是不是符合要求
3. 可行解对于区间要符合单调性, 因为有序才能二分
24.如果要在函数中修改全局变量需要提前在函数内部global一下全局变量
a = 0
def func():
global a
a += 1
25.Python中的math库:优快云收藏夹内
26.Python中ord函数: 该函数是以单个字符作为参数,返回对应的ASCll数值
27.若列表内存在数字但是为字符串形式,对其进行sort(),仍然会俺int型排序
28.Python中字符串类型是不可变类型,不能直接对其修改,下面的方式才为正确的修改方式
>>> s='abcdef'
>>> s=s.replace('a','A') #用A替换a
>>> s
'Abcdef'
>>> s=s.replace('bcd','123') #用123替换bcd
>>> s
'A123ef'
或
>>> s='abcdef' #原字符串
>>> s1=list(s) #将字符串转换为列表
>>> s1
['a', 'b', 'c', 'd', 'e', 'f'] #列表的每一个元素为一个字符
>>> s1[4]='E' #将列表中的第5个字符修改为E
>>> s1[5]='F' #将列表中的第5个字符修改为E
>>> s1
['a', 'b', 'c', 'd', 'E', 'F']
>>> s=''.join(s1) #用空串将列表中的所有字符重新连接为字符串
>>> s
'abcdEF' #新字符串
29.在进行递归遍历时可以加入以下代码防止出现段错误,因为Python递归深度默认为1000
import sys
sys.setrecursionlimit(1000000) # 将递归深度改为1000000
30.Python 四舍五入函数round()
round(number,digits)
1. digits>0,四舍五入到指定的小数位
2. digits=0, 四舍五入到最接近的整数
3. digits<0 ,在小数点左侧进行四舍五入
其四舍五入规则:
要求保留位数的后一位<=4,则进位,如round(5.214,2)保留小数点后两位,结果是 5.21
要求保留位数的后一位“=5”,且该位数后面没有数字,则不进位,如round(5.215,2),结果为5.21
要求保留位数的后一位“=5”,且该位数后面有数字,则进位,如round(5.2151,2),结果为5.22
要求保留位数的后一位“>=6”,则进位。如round(5.216,2),结果为5.22
本人也对蓝桥云课部分题目也进行了相应的解答,如果有不懂的地方欢迎光顾并留下您的宝贵意见!