看这个就够了

导航

leetcode常用函数刷题必备(一)

自己从大二开始做leetcode常用的几种python函数,做题时经常用到:

1.enumerate() 函数

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

3.ord()和chr()字母排序

ddict = {chr(i): [] for i in range(ord('a'), ord('z') + 1)}

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()函数

正则表达式中,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
 

posted on 2021-09-05 16:51  看这个就够了  阅读(927)  评论(0编辑  收藏  举报