当前位置 博文首页 > 向日葵的专属太阳:Python 真·精选 面试题45道(建议收藏,蹲坑
本文的由来是笔者搜罗各大网站 Python
面试题时发现,大部分的文章中的面试题有的太过基础(不是笔者装🍺哈),不信看下面。
还有的更厉害,不知道在哪 copy 的,经常一打开全是 110道Python面试题
。。
然后笔者就在 CSDN
、Github
等平台,整理了一些我认为比较有价值的题目,部分题目是我根据自身的经历进行改编的。同时用 ☆ 来表示题目的难度,如果内容有错误,请在评论区下面留言,感激不尽!!
|
---|
1.如何用 Python 输出一个 100 以内的斐波那契数列(Fibonacci sequence)?★★☆☆☆ |
2.什么是 lambda 函数?它有什么好处?★★☆☆☆ |
3.请简述 Python 中 is 和 == 的区别。★★☆☆☆ |
4.请简述 function(*args, **kwargs) 中的 *args , **kwargs 分别是什么意思?★★☆☆☆ |
5.请简述面向对象中 __new__ 和 __init__ 的区别。★★★☆☆ |
6.Python 子类继承自多个父类时,如多个父类有同名方法,子类将继承自哪个方法?★☆☆☆☆ |
7.判断两个字符串是否同构。★★☆☆☆ |
8.请写出匹配中国大陆手机号且结尾不是 4 和 7 的正则表达式。 ★★☆☆☆ |
9.使用递推式将矩阵 [ [1, 2], [3, 4], [5, 6] ] 转换为一维向量。 ★☆☆☆☆ |
10.编写 Python 程序,打印星号金字塔。★★☆☆☆ |
11.生成随机整数、随机小数、0-1之间小数的方法。★★☆☆☆ |
12.列表 [1, 2, 3, 4, 5],使用 map() 函数输出 [1, 4, 9, 16, 25],再通过列表推导式获取大于 10 的数。★★☆☆☆ |
13.对字符串去重,并从大到小输出排序。★★☆☆☆ |
14.字典根据键从大到小排序;根据值从大到小排序。★★☆☆☆ |
15.统计字符串中每个字母出现的次数,获取出现次数最多的两个字母及它们的出现次数。★★★☆☆ |
16.filter 方法获取 1 - 10 中 3 的倍数。★★☆☆☆ |
17.a = (1),b = (1, ),c = (‘1’)分别是什么类型。★★☆☆☆ |
18.x = ‘abc’, y = ‘def’, z = [‘d’, ‘e’, ‘f’],写出 x.join(y) , x.join(z) 的结果。★★☆☆☆ |
19.s = ‘静香语文100分, 静香数学100分’,将第一个 “静香” 换成 “胖虎” 。★★☆☆☆ |
20.写出常见的几种异常及含义。★★★☆☆ |
21.解释一下直接赋值、浅拷贝与深拷贝有什么区别?★★★★☆ |
22.使用 lambda 函数对 lst = [-1, -5, 2, -3, 1, 4, -4, 3, -2, 5] 进行排序,要求排序结果正数在前(从小到大),负数在后(从大到小),如 [1, 2, 3, 4, 5, -1, -2, -3, -4, -5]。★★★☆☆ |
23.按照年龄从小到大,班级从小到大对 [{‘age’: 18, ‘class’: 2}, {‘age’: 21, ‘class’: 1}, {‘age’: 19, ‘class’: 2}, {‘age’: 19, ‘class’: 1}] 列表进行排序。★★★☆☆ |
24.Python 中有哪些可变类型和不可变类型,它们有什么不同?★★☆☆☆ |
25.写出你知道的将两个字典合并为一个新字典的方法。★★★★☆ |
26.将文件内容按行读取到列表中。★★☆☆☆ |
27.Python 内置函数 any() 和 all() 的用法。★★☆☆☆ |
28.谈谈 Python 中的垃圾回收机制。★★★★☆ |
29.Python 的 re 模块中 match() 和 search() 的区别?★★★☆☆ |
30.在读文件操作的时候会使用 read() 、readline() 或者 readlines() ,简述它们各自的作用。★★★☆☆ |
31.解释一下什么是闭包?★★☆☆☆ |
32.递归函数停止的条件。★★☆☆☆ |
33.Python 正则匹配 “good good study, day day up” 时,(g.*d) 和 (g.*?d) 有什么区别?★★★☆☆ |
34.简述解释型和编译型编程语言?★★★☆☆ |
35.xrange 和 range 的区别?★★☆☆☆ |
36.简述 yield 和 yield from 关键字。★★★★☆ |
37.Python 中的 help() 和 dir() 函数有什么用?★★★☆☆ |
38.在 Python 中怎么实现线程?★★★★☆ |
39.Python 中什么是猴子补丁?★★★★☆ |
40.如何以就地操作方式打乱一个列表的元素?★★☆☆☆ |
41.将字符串 'love' 更改为 'live' 。★★☆☆☆ |
42.写出下列代码的结果。★★☆☆☆ |
43.Python 中函数调用参数的传递方式是值传递还是引用传递?★★★☆☆ |
44.现有一个 DataFrame 数据集中包含学生的姓名与分数,先要新增一列"评价"记录学生的及格情况,如果分数低于 60 即为 “不及格”,否则 “及格”。★★★☆☆ |
45.现在为获取更详细的信息,需要将 “评价” 列进行划分,60以下不及格、60至80及格、80以上优秀。★★★☆☆ |
难度:★★☆☆☆
>>> a, b = 0, 1
>>> while b < 100:
print(b, end=' ')
a, b = b, a + b
1 1 2 3 5 8 13 21 34 55 89
难度:★★☆☆☆
lambda
函数是一个可以接收任意多个参数 (包括可选参数) 并且返回单个表达式值的函数。 lambda
函数不能包含命令,它们所包含的表达式不能超过一个。
难度:★★☆☆☆
Python
中的对象包含三个要素:id
、type
和 value
。is
比较的是两个对象的 id
。==
比较的是两个对象的 value
。
难度:★★☆☆☆
*args
和 **kwargs
主要用于函数定义的参数。Python
语言允许将不定数量的参数传给一个函数,其中 *args
表示一个非键值对的可变参数列表,**kwargs
则表示不定数量的键值对参数列表。注意:*args
和 **kwargs
可以同时在函数的定义中,但是 *args
必须在**kwargs
前面。
难度:★★★☆☆
(1) __new__
至少要有一个参数 cls
,代表当前类,此参数在实例化时由 Python
解释器自动识别。
(2) __new__
返回生成的实例,可以返回父类(通过 super
(当前类名, cls
)的方式)__new__
出来的实例, 或者直接是对象的 __new__
出来的实例。这在自己编程实现 __new__
时要特别注意。
(3) __init__
有一个参数 self
,就是这个 __new__
返回的实例, __init__
在 __new__
的基础上可以完成一些其它初始化的动作, __init__
不需要返回值。
(4) 如果 __new__
创建的是当前类的实例,会自动调用 __init__
,通过返回语句里面调用的 __new__
函 数的第一个参数是 cls
来保证是当前类实例,如果是其他类的类名,那么实际创建并返回的就是其他类的实例,也就不会调用当前类或其他类的 __init__
函数。
难度:★☆☆☆☆
Python
语言中子类继承父类的方法是按照继承的父类的先后顺序确定的,例如,子类 A 继承自父类 B、 C,且B、C中具有同名方法 Test()
,那么 A 中的 Test()
方法实际上是继承自B中的 Test()
方法。
难度:★★☆☆☆
字符串同构是指字符串 s 中的所有字符都可以替换为 t 中的所有字符。在保留字符顺序的同时,必须用另 一个字符替换所有出现的字符。不能将 s 中的两个字符映射到 t 中同一个字符,但字符可以映射到自身。 试判定给定的字符串 s 和 t 是否同构。
例如:
s = “paper”
t = “title”
输出 True
s = “add”
t = “apple”
输出 False
>>> s = 'app'
>>> t = 'add'
>>> len(set(s)) == len(set(t)) == len(set(zip(s, t)))
True
难度:★★☆☆☆
>>> import re
>>> tel = '15674899231'
>>> "有效" if (re.match(r"1\d{9}[0-3,5-6,8-9]", tel) != None) else "无效"
'有效'
难度:★☆☆☆☆
>>> a = [[1, 2], [3, 4], [5, 6]]
>>> [j for i in a for j in i]
[1, 2, 3, 4, 5, 6]
难度:★★☆☆☆
编写尽量短的 Python
程序,实现打印星号金字塔。例如 n=5
时输出以下金字塔图形:
*
***
*****
*******
*********
>>> n = 5
>>> for i in range(1, n + 1):
print(' '*(n-(i-1))+'*'*(2*i-1))
*
***
*****
*******
*********
难度:★★☆☆☆
>>> import random
>>> import numpy as np
>>> print('正整数:', random.randint(1, 10))
正整数: 2
>>> print('5个随机小数:', np.random.randn(5))
5个随机小数: [ 0.76768263 -0.3587897 0.04880354 -0.02443411 0.73785606]
>>> print('0-1随机小数:', random.random())
0-1随机小数: 0.24387235868905555
难度:★★☆☆☆
>>> lst = [1, 2, 3, 4, 5]
>>> map(lambda x: x**2, lst)
<map object at 0x000002B37C9D88B0>
>>> [n for n in res if n > 10]
[16, 25]
难度:★★☆☆☆
>>> s = 'aabcddeff'
>>> set_s = set(list(s))
>>> list_s = sorted(list(set_s), reverse=True)
>>> ''.join(list_s)
'fedcba'
难度:★★☆☆☆
dic = {'a': 2, 'b': 1, 'c': 3, 'd': 0}
lst1 = sorted(dic.items(), key=lambda x: x[0], reverse=False)
# [('a', 2), ('b', 1), ('c', 3), ('d', 0)]
lst2 = sorted(dic.items(), key=lambda x: x[1], reverse=False)
# [('d', 0), ('b', 1), ('a', 2), ('c', 3)]
res_dic1 = {key: value for key, value in lst1}
res_dic2 = {key: value for key, value in lst2}
print('按照键降序:', res_dic1)
print('按照值降序:', res_dic2)
# 按照键降序: {'a': 2, 'b': 1, 'c': 3, 'd': 0}
# 按照值降序: {'d': 0, 'b': 1, 'a': 2, 'c': 3}
难度:★★★☆☆
>>> from collections import Counter
>>> s = 'aaaabbbccd'
>>> Counter(s).most_common(2)
[('a', 4), ('b', 3)]
难度:★★☆☆☆
>>> list(filter(lambda x: