以下是针对“2019 Python最新面试题及答案16道题”的完整攻略:
1. 阅读下面程序,写出输出结果
a = [1, 2, 3, 4, 5]
b = a
a = a[:2]
print(b)
答案: [1, 2, 3, 4, 5]
解析: 首先,列表a
被赋值给了变量b
,此时b
和a
引用了同一个列表对象。然后,使用切片操作(a = a[:2]
)将a
截取了前两个元素,实际上是创建了一个新的列表对象并将其赋给了a
,此时变量b
仍然引用原来的列表对象。因此,输出的结果是[1, 2, 3, 4, 5]
。
2. 写出至少 5 个标准库
答案: Python标准库包含了多个常用的模块,以下是一些常用的标准库:
os
:提供了一些与操作系统交互的函数。sys
:提供了对Python解释器的访问和交互的函数。re
:提供了正则表达式的支持。datetime
:提供了表示日期和时间的相关类和函数。math
:提供了数学运算的函数和常量。
3. 在 Python 中如何实现多重继承
答案: Python 中实现多重继承可以在类定义时同时继承多个父类,使用逗号分隔。例如:
class MyClass(BaseClass1, BaseClass2, BaseClass3):
pass
此时 MyClass
类同时继承了 BaseClass1
、BaseClass2
和 BaseClass3
三个类。子类在继承多个父类时需要注意方法名冲突的问题,可以通过 super()
函数调用父类中的同名方法。
4. 写一个函数找出一个整数数组中,第二大的数
答案: 可以使用以下方法实现:
def second_largest(numbers):
if len(numbers) < 2:
return None
largest = second_largest = float('-inf')
for num in numbers:
if num > largest:
second_largest = largest
largest = num
elif num > second_largest:
second_largest = num
return second_largest
该函数首先判断数组长度是否小于 2,如果是,则返回 None
。然后使用两个变量 largest
和 second_largest
记录目前找到的最大值和第二大的值,初始值设为负无穷。遍历数组,如果当前元素比 largest
大,则将原来的 largest
赋给 second_largest
,将 num
设为新的 largest
;否则,如果当前元素比 second_largest
大,则将 num
设为新的 second_largest
。最后返回 second_largest
。
示例:
numbers = [1, 2, 3, 4, 5]
print(second_largest(numbers)) # 输出 4
5. Python 里面如何实现tuple和list的转换?
答案: Python 中提供了内置函数 list()
和 tuple()
分别用于将列表转换为元组和将元组转换为列表。例如:
# 将元组转换为列表
t = (1, 2, 3)
l = list(t)
print(l) # 输出 [1, 2, 3]
# 将列表转换为元组
l = [4, 5, 6]
t = tuple(l)
print(t) # 输出 (4, 5, 6)
6. Python 字典如何删除键和合并两个字典
删除键可以使用字典的 del
关键字,例如:
d = {'a': 1, 'b': 2, 'c': 3}
del d['a'] # 删除键 'a'
print(d) # 输出 {'b': 2, 'c': 3}
合并两个字典可以使用字典的 update()
方法,例如:
d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'd': 4}
d1.update(d2) # 将 d2 合并到 d1 中
print(d1) # 输出 {'a': 1, 'b': 2, 'c': 3, 'd': 4}
7. Python实现列表去重的方法
Python 中可以使用 set
数据类型实现列表去重。
l = [1, 1, 2, 2, 3, 4, 5, 5]
result = list(set(l))
print(result) # 输出 [1, 2, 3, 4, 5]
首先将列表转换为 set,这会自动去重,然后再将 set 转换为列表即可。
8. Python中生成随机数的方法
Python 中可以使用 random
模块来生成随机数。其中一些常用的函数包括:
random.random()
:生成一个 0~1 之间的随机小数。random.randint(a, b)
:生成一个 a~b 之间的随机整数(包含边界值 a 和 b)。random.choice(seq)
:从序列seq
中随机选择一个元素。random.shuffle(lst)
:将列表lst
中的元素随机打乱。
示例:
import random
# 生成一个 0~1 之间的随机小数
randfloat = random.random()
print(randfloat)
# 生成一个 1~10 之间的随机整数
randint = random.randint(1, 10)
print(randint)
# 从列表中随机选择一个元素
lst = ['a', 'b', 'c']
randchoice = random.choice(lst)
print(randchoice)
# 将列表中的元素随机打乱
lst = [1, 2, 3, 4, 5]
random.shuffle(lst)
print(lst)
9. Python类中 new 和 init 的区别
__new__
方法是一个静态方法,用于创建一个类的实例对象,该方法会返回一个新创建的对象,可以通过调用 super().__new__(cls)
来调用父类的 __new__
方法并创建对象。
__init__
方法是一个实例方法,在对象创建后并且新创建的对象由 __new__
方法返回之后调用。该方法用于初始化对象的属性或执行其他操作。
因此,__new__
方法是类的构造器,负责创建对象;而 __init__
方法负责初始化对象。
示例:
class Person:
def __new__(cls, name):
print("__new__ method is called")
return super().__new__(cls)
def __init__(self, name):
print("__init__ method is called")
self.name = name
p = Person("Alice")
以上代码执行结果为:
__new__ method is called
__init__ method is called
10. 写一个函数判断字符串是否是回文串
答案: 可以使用以下方法实现:
def is_palindrome(s):
s = s.lower() # 转换为小写字母
left = 0 # 左指针
right = len(s) - 1 # 右指针
while left < right:
if not s[left].isalnum(): # 左指针指向的字符不是数字或字母
left += 1
continue
if not s[right].isalnum(): # 右指针指向的字符不是数字或字母
right -= 1
continue
if s[left] != s[right]: # 左右指针指向的字符不相等
return False
left += 1
right -= 1
return True
该函数首先将字符串转换为小写字母,然后使用双指针依次比较两端的字符,直到两个指针相遇。在比较过程中,如果左指针指向的字符不是数字或字母,则右移左指针;如果右指针指向的字符不是数字或字母,则左移右指针;如果两个指针指向的字符不相等,则返回 False;否则,左指针右移,右指针左移。最终如果所有字符比较都相等,则返回 True。
示例:
s1 = "A man, a plan, a canal: Panama"
s2 = "race a car"
print(is_palindrome(s1)) # 输出 True
print(is_palindrome(s2)) # 输出 False
11. Python函数重写实例
class Parent(object):
def myMethod(self):
print ('调用父类方法')
class Child(Parent):
def myMethod(self):
print ('调用子类方法')
答案: 上面的代码定义了一个名为 Parent
的类,其中包含一个 myMethod()
方法,在该方法中输出调用父类方法的信息。然后定义了一个名为 Child
的子类,该子类继承自 Parent
,并重写了 myMethod()
方法,在该方法中输出调用子类方法的信息。
示例:
p = Parent()
c = Child()
p.myMethod() # 输出调用父类方法
c.myMethod() # 输出调用子类方法
上面的代码输出结果为:
调用父类方法
调用子类方法
12. Python中如何实现单例模式
答案: 可以使用以下方法实现:
class Singleton:
_instance = None
def __new__(cls):
if not cls._instance:
cls._instance = super().__new__(cls)
return cls._instance
该类的实现方式使用了 Python 的类变量 _instance
来保存单例实例,当 _instance
不存在时则创建一个新的实例并保存在 _instance
中,否则返回已有的实例。
示例:
s1 = Singleton()
s2 = Singleton()
print(s1 == s2) # 输出 True
因为 s1
和 s2
是 Singleton
类的两个实例,因此使用相等运算符比较时返回 True。
13. Python中有哪些序列解包的方法?
序列解包可以将序列中的元素拆分并分别赋值给多个变量。
以下是一些常用的序列解包方法:
- 将一个元组或列表解包成单个变量,例如:
python
t = (1, 2, 3)
a, b, c = t
print(a, b, c) # 输出 1 2 3
- 将一个元组或列表解包为多个变量,但只取其中的部分元素,例如:
python
t = (1, 2, 3, 4)
a, b, *c = t
print(a, b, c) # 输出 1 2 [3, 4]
在这个示例中,使用 *
号将变量 c
声明为一个列表,将元组或列表的剩余元素赋给 c
。
- 交换两个变量的值,例如:
python
a = 1
b = 2
a, b = b, a
print(a, b) # 输出 2 1
在上面的代码中,使用序列解包方式交换了变量 a
和 b
的值。
14. 如何在 Python 中打印出当前的日期和时间
答案: 可以使用 datetime
模块中的 datetime
类来获取当前的日期和时间,例如:
from datetime import datetime
now = datetime.now()
print(now.strftime("%Y-%m-%d %H:%M:%S"))
在这个示例中,datetime.now()
方法返回当前日期和时间的 datetime
对象,然后使用 strftime()
方法将其格式化为字符串,输出的格式为 YYYY-MM-DD HH:MM:SS
。
15. Python中如何读写文件
可以使用 Python 内置的 open()
函数打开一个文件,例如:
f = open("file.txt", "r")
在这个示例中,打开了一个名为 file.txt
的文件,并以只读模式打开。
可用的打开模式包括:
'r'
:只读模式(默认)。'w'
:写入模式,会覆盖文件中的所有内容。'a'
:追加模式,将新内容添加到文件末尾。'x'
:独占创建,如果文件不存在则创建新文件,否则报错。'b'
:二进制模式。't'
:文本模式(默认)。
读取文件内容可以使用 read()
方法。例如:
with open("file.txt", "r") as f:
content = f.read()
print(content)
在这个示例中,with
语句用来打开文件并自动关闭文件。read()
方法用于读取文件内容,并将其保存在变量 content
中,然后输出该变量的内容。
写入文件可以使用 write()
方法。例如:
with open("file.txt", "w") as f:
f.write("Hello world!")
在这个示例中,with
语句用来打开文件并自动关闭文件。write()
方法用于写入内容到文件中,这里写入了一个字符串 “Hello world!”。
16. 如何使用 Python 来获取一个文件的扩展名
答案: 可以使用 os.path
模块来获取文件的扩展名。例如:
import os
filename = "file.txt"
extension = os.path.splitext(filename)[1]
print(extension)
在这个示例中,先定义了一个文件名 file.txt
。然后使用 os.path.splitext()
方法来将文件名拆分为文件名和扩展名两部分,返回值为元组类型,然后取元组的第二个元素即可获得文件的扩展名。输出结果为 “.txt”。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:2019 Python最新面试题及答案16道题 - Python技术站