华为笔试知识点总结

基本上把牛客网的华为机试题做完了,总结了一些在做题过程中收集的知识点。

1.处理输入数据的框架:

1
2
3
4
5
6
7
8
while True:
try:
# 这里是程序的主体
# 处理字符串的用input()
#
except:
# 多行输入对应单个输出的话,输出语句写在这里。
break

2.常用的数据结构:

数据结构 添加 删除 生成
list append() pop() []
set add() remove() set()
dict d[‘x’] pop(key) dict()

有个字典挺好用的,在统计数量上有奇效。它设有默认值。

1
2
from collections import defaultdict
a = defaultdict(int)

3.字符串的操作:

参考:https://www.runoob.com/python/python-strings.html

比较常用的说一下:
in 操作符 如果字符串包含给定的字符返回True

string.join(seq)以string作为分隔符,将seq中所有的元素合并为一个新的字符串。

count 返回str在string里面出现的次数

find 检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1

isalnum 如果至少有一个字符并且所有字符都是字母或者数字则返回True

isalpha 如果至少有一个字符并且所有字符都是字母则返回True

Isupper 如果是大写返回True

islower 如果是小写返回True

isdigit如果至少有一个字符并且所有字符都是数字则返回True

max 返回字符串最大的字母

min 返回字符串最小的字母

%s 是一种字符串格式化的语法,基本用法就是将值入到%s占位符的字符串中。%s表示格式化一个对象为字符

1
2
string = "good"  #类型为字符串
print("string=%s" %string) #输出的打印结果为 string=good

r’ ‘ 告诉系统不需要转义,就是直接的这个字符串。不涉及到转义字符。

统计字符串的字母的个数:

1
2
3
4
5
6
7
8
9
10
11
from collections import Counter
Counter(input())
#返回的是一个以元素为key,元素个数为value的Counter对象,通常配合most_common()使用。代码如下:
# 这里一定要两者配合使用,否则Couter返回的是一个counter对象,对题目没有帮助。

from collections import Counter
#统计字符串
# top n问题
user_counter = Counter("abbafafpskaag")
print(user_counter.most_common(3)) #[('a', 5), ('b', 2), ('f', 2)]
print(user_counter['a']) # 5

4.ASCII字符转换

ord()字符转换成ASCII值

chr()ASCII值转换成字符

5.range的倒序遍历:

range(start,end-1,-1) # range(9,-1,-1)

6.自定义排序

注意,这里使用的条件是数组,不是字符串。

1
o

默认是函数值从小到大排序

7.数值精度

例如:result为一个list,为result中每个值保留4位。
result = [("%.4f" % i) for i in result]

8.字节的长度:

GBk 中文两个字节
UTF 中文三个字节
查看不同编码下的字节长度:

1
len(i.encode('gbk'))  # 'gbk','utf8'

9.print(a,b)是自带空格的,输出为:a b

10.二维数组和一维数组其实差不多。

11.定义一个新的结构体:(链表,数的结点等)

1
2
3
4
class Node(object):
def __init__(self,elem):
self.elem = elem
self.next = None

12.判断一个数是否是质数:

1
2
3
4
5
6
7
8
链接:https://www.nowcoder.com/questionTerminal/f8538f9ae3f1484fb137789dec6eedb9
来源:牛客网
#从质数的性质出发,质数的意思就是从2到自身的开平方,没有一个数可以整除它。
def isPrime(n):
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True

13.排列与组合:

组合用combinations

排列用permutations

1
2
3
4
5
6
7
8
9
form itertools import combinations, permutations
list01 = list(combinations('abc',2))
print(list01)
list02 = list(permutations([1,2,3],3))
print(list02)

results:
[('a','b'),('a','c'),('b','c')]
[(1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2),(3,2,1)]

14.输出一个矩阵

1
2
3
# 这里的矩阵是
for i in range(x):
print(' '.join(list(map(str,res[i]))))

15.参数改变的问题

参考:https://www.cnblogs.com/monkey-moon/p/9347505.html

不想改变的话用copy.deepcopy(a)

16.位移

1
a = a >> 1

17.字符串格式化

方法一:format函数

1
2
3
4
>>> print('{:.3f}'.format(1.23456))
1.235
>>> print(format(1.23456, '.2f'))
1.23

format有不同用法,前者使用了占位符{},使用占位符可以同时输出多个,后者一次只能输出一个,需要注意的是占位符中的冒号不能丢。推荐使用占位符+format输出。

1
2
>>> print('{:.3f} {:.2f}'.format(1.23456, 1.23456))
1.235 1.23

方法二:’%.xf’方法

1
2
3
>>> print('%.2f' % 1.23456)
1.23
# 有多个的,和上面的一样,括号括起来就行。

18.字典的遍历:

(1)遍历key值

1
2
3
4
5
6
7
8
9
10
11
12
>>> a
{'a': '1', 'b': '2', 'c': '3'}
>>> for key in a:
print(key+':'+a[key])
a:1
b:2
c:3
>>> for key in a.keys():
print(key+':'+a[key])
a:1
b:2
c:3

(2)遍历value

1
2
3
4
5
6
>>> for value in a.values():
print(value)

1
2
3

(3)遍历字典项

1
2
3
4
5
6
>>> for key,value in a.items():
print(key+':'+value)

a:1
b:2
c:3

(4)按一定的顺序遍历字典项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 按key排序
#对字典按键(key)进行排序(默认由小到大)
test_data_0=sorted(dict_data.keys())
#输出结果
print(test_data_0) #[3, 6, 7, 8, 10]
test_data_1=sorted(dict_data.items(),key=lambda x:x[0])
#输出结果
print(test_data_1) #[(3, 11), (6, 9), (7, 6), (8, 2), (10, 5)]
# 按value排序
#对字典按值(value)进行排序(默认由小到大)
test_data_2=sorted(dict_data.items(),key=lambda x:x[1])
#输出结果
print(test_data_2) #[('8', 2), ('10', 5), ('7', 6), ('6', 9), ('3', 11)]
test_data_3=sorted(dict_data.items(),key=lambda x:x[1],reverse=True)
#输出结果
print(test_data_3) #[('3', 11), ('6', 9), ('7', 6), ('10', 5), ('8', 2)]
请作者喝杯咖啡吧!