leetcode常用函数刷题必备(一)
自己从大二开始做leetcode常用的几种python函数,做题时经常用到:
enumerate(sequence, [start=0])
-
sequence -- 一个序列、迭代器或其他支持迭代对象。
-
start -- 下标起始位置。
返回 enumerate(枚举) 对象。
以下展示了使用 enumerate() 方法的实例:
seasons = ['Spring', 'Summer', 'Fall', 'Winter'] list(enumerate(seasons)) >>>>[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] list(enumerate(seasons, start=1)) >>>># 下标从 1 开始 [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
2.index()和find()函数
index() 方法检测字符串(列表)中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常。
index一般用来检测列表,find只能检测字符串
index()方法语法: #find()一样
str.index(str, beg=0, end=len(string))
-
str -- 指定检索的字符串
-
beg -- 开始索引,默认为0。
-
end -- 结束索引,默认为字符串的长度。
如果包含子字符串返回开始的索引值,否则抛出异常。
以下实例展示了index()方法的实例:
1 str1 = "this is string example....wow!!!"; 2 str2 = "exam"; 3 4 print str1.index(str2); 5 print str1.index(str2, 10); #10代表从10开始 6 print str1.index(str2, 40);
以上实例输出结果如下:
1 15 2 15 3 Traceback (most recent call last): 4 File "test.py", line 8, in 5 print str1.index(str2, 40); 6 ValueError: substring not found
ord()函数主要用来返回对应字符的ascii码,chr()主要用来表示ascii码对应的字符他的输入时数字,可以用十进制,也可以用十六进制。
例如:
1 print ord('a) 2 #97 3 4 print chr(97) 5 #a 6 7 print chr(0x61) 8 #a
4.zip()函数
zip 语法:
zip([iterable, ...])
参数说明:
-
iterabl -- 一个或多个迭代器;
返回一个对象。
以下实例展示了 zip 的使用方法:
1 a = [1,2,3] 2 b = [4,5,6] 3 c = [4,5,6,7,8] 4 5 zipped = zip(a,b) # 返回一个对象 6 7 zipped 8 <zip object at 0x103abc288> 9 10 list(zipped) # list() 转换为列表 11 [(1, 4), (2, 5), (3, 6)] 12 13 list(zip(a,c)) # 元素个数与最短的列表一致 14 [(1, 4), (2, 5), (3, 6)] 15 16 a1, a2 = zip(*zip(a,b)) #与zip 相反,zip(*) 可理解为解压,返回二维矩阵式 17 18 list(a1) 19 [1, 2, 3] 20 21 list(a2) 22 [4, 5, 6]
zip()取最短元素长度
zip_longest()取最长元素长度
5.sort()函数
sort()函数语法:
sort(key=None, reverse=False)
key 可指定一些规则
reverse 默认值是False,可以给它赋值成True,那就是反向排序
有意思的是,sort不仅可以给数组,字典排序,而且sort的key中可以有多个值,重要性按从前到后排序
举个栗子:
1 nums = [[7,7],[1,2],[9,7],[7,3],[3,10],[9,8],[8,10],[4,3],[1,5],[1,5]] 2 3 nums.sort(key = lambda x: (x[0], -x[1])) #第一个数从大到小,如果一样,第二个数从小到大 4 5 >>>>[[1, 5], [1, 5], [1, 2], [3, 10], [4, 3], [7, 7], [7, 3], [8, 10], [9, 8], [9, 7]]
6.Counter()函数
c = Counter(items)
1 from collections import Counter 2 colors = ['red', 'blue', 'red', 'green', 'blue', 'blue'] 3 c = Counter(colors) 4 print (dict(c))
(1)从Collections集合模块中引入集合类Counter
(2)Counter(colors)可以打印出数组colors中每个元素出现的次数
(3)Counter(a).most_common(2)可以打印出数组中出现次数最多的元素。参数2表示的含义是:输出几个出现次数最多的元素。
非常方便统计次数的题目
7.Group()函数
1 import re 2 a = "123abc456" 3 print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) #123abc456,返回整体 4 print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1) #123 5 print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2) #abc 6 print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3) #456
究其因
\1. 正则表达式中的三组括号把匹配结果分成三组
-
group() 同group(0)就是匹配正则表达式整体结果
-
group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。
\2. 没有匹配成功的,re.search()返回None
\3. 当然正则表达式中没有括号,group(1)肯定不对了。
groups()函数
它返回一个包含所有匹配子群的元组。
1 a = "123abc456" 2 m = re.search("([0-9]*)([a-z]*)([0-9]*)",a) 3 m.groups() 4 ('123', 'abc', '456')
groupdict()函数
它返回一个字典,包含所有经命名的匹配子群,键值是子群名。
1 m = re.match(r'(?P<user>\w+)@(?P<website>\w+)\.(?P<extension>\w+)','myname@hackerrank.com') 2 m.groupdict() 3 {'website': 'hackerrank', 'user': 'myname', 'extension': 'com'} 4