面试之前的一些问题总结

牛客网线上笔试

数据的读入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#数据输入格式为:
# 5
# 1 2
# 5 3
# 4 6
# 7 5
# 9 0

import sys

num = sys.stdin.readline().strip()
num = int(num)
data = []
for i in range(num):
line = sys.stdin.readline().strip()
if line == '':
break
line = [int(val) for val in line.split(' ')]
data.append(line)
## 成功读到data

最终答案需要print输出

1
print(result)

collections库的用法

counter

1
2
3
4
5
6
7
8
9
10
from collections import Counter
count = Counter(['a','b','b','c','d','b','a'])
print(count)
# Counter({'b': 3, 'a': 2, 'c': 1, 'd': 1})
count.items()
# Out[6]: dict_items([('a', 2), ('b', 3), ('c', 1), ('d', 1)])
list(count.elements())
# Out[10]: ['a', 'a', 'b', 'b', 'b', 'c', 'd']
count.most_common()
# [('b', 3),('a', 2), ('c', 1), ('d', 1)]

defaultdict

1
2
3
4
5
from collections import defaultdict
dicto = defaultdict(list) # 不需要判断元素是否已经存在key中,存入参数为values对应的类型
dicto['lei']
# dicto:{'lei':[]}
dicto.pop('lei')

python的map函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def double(x):
return x ** 2

nums = [1,2,3,4]
res = list(map(double,nums)) # res = [1,4,9,16]
map # 传参数只能传入一个参数,或者选择将参数组合起来,作为整体输入

def bigger(x):
if x[0] > x[1]:
return x[0]
bb = [1,2,3,4,5]
val = [3,3,3,3,3]
cc = list(zip(bb,val))
result = list(map(bigger,cc))
print(result)

lambda表达式

1
2
3
4
5
6
7
8
9
g = lambda x:x+1 # 输入的参数为x,输出x+1的结果
f = lambda a,b:a*b # 传入多个参数
# lambda配合其他函数使用
filter(lambda x:x>3,alist)
sorted(alist,key = lambda x:(x[1],x[0])) # 按照不同的列进行排序
sorted(alist,key= lambda x:abs(x-5)) # 按照和5的距离排序
map(lambda x:x**2,alist) # 对数组元素都做lambda运算
reduce(lambda a,b:a+b,alist) # reduce两个元素算完放回list
# 如[1,2,3,4,5]计算如 ((((1+2)+3)+4)+5)

bisect库

使得有序列表插入仍保持有序,函数返回值是插入的位置:

1
2
3
4
5
6
7
8
9
10
import bisect

bisect.bisect_left(alist,target,lo=0,hi=len(alist))
# 其中alist是有序数组,target是插入的目标,如果target存在,就返回target的左边
bisect.bisect_right(alist,target,lo=0,hi=len(alist))
bisect.bisect(alist,target,lo=0,hi=len(alist))
# 均返回插入点的右侧的
bisect.insort_left(alist,target,lo=0,hi=len(alist))# 找到插入点,并插入元素,左插
bisect.insort(alist,target,lo=0,hi=len(alist))
bisect.insort_right(alist,target,lo=0,hi=len(alist))# 找到插入点,并插入元素,右插