Python 常见的 170 道面试题(41-48 综合)
综合
41.Python 常用的数据结构的类型及其特性?
A:{1:0,2:0,3:0}
B:{"a":0, "b":0, "c":0}
C: {(1,2):0, (2,3):0}
D: {[1,2]:0, [2,3]:0}
# 答:D 因为只有可 hash 的对象才能做字典的键,列表是可变类型不是可 hash 对象,所以不能用列表做为字典的键。
42.如何交换字典 {“A”:1,“B”:2}的键和值?
s = {"A":1,"B":2}
#方法一:
dict\_new = {value:key for key,value in s.items()}
# 方法二:
new\_s= dict(zip(s.values(),s.keys()))
43.Python 里面如何实现 tuple 和 list 的转换?
Python 中的类型转换,一般通过类型强转即可完成 tuple 转 list 是 list() 方法 list 转 tuple 使用 tuple() 方法
44.我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?
这个题目考察了 Python 标准库的 itertools 模快的掌握情况,该模块提供了操作生成器的一些方法。 对于生成器类型我们使用 islice 方法来实现切片的功能。例子如下
from itertools import islice
gen = iter(range(10)) # iter()函数用来生成迭代器
# 第一个参数是迭代器,第二个参数起始索引,第三个参数结束索引,不支持负数索引
for i in islice(gen,0,4):
print(i)
45.请将[i for i in range(3)]改成生成器
通过把列表生产式的中括号,改为小括号我们就实现了生产器的功能, 实现如下:
test = (i for i in range(3))
print(next(test))
print(next(test))
print(next(test))
# >>> 0
# >>> 1
# >>> 2
46.a="hello"和 b="你好"编码成 bytes 类型
# 字符串的前面加一个 b
a = b"hello"
# 可以使用 bytes 方法
b = bytes("你好", "utf-8")
# 使用字符串 encode 方法
c = "你好".encode("utf-8")
print(a, b, c)
47.下面的代码输出结果是什么?
a = (1,2,3,[4,5,6,7],8)
a[2] = 2
# 会返回异常,元组中的元素不可改变
48.下面的代码输出的结果是什么?
a = (1,2,3,[4,5,6,7],8)
a[3][0] = 2
# >>> (1,2,3,[2,5,6,7],8)
# 前面我说了元组的里元素是不能改变的,这句话严格来说是不准确的,如果元组里面元素本身就是可变类型,比如列表,那么在操作这个元素里的对象时,其内存地址也是不变的。a[3] 对应的元素是列表,然后对列表第一个元素赋值,所以最后的结果是: (1,2,3,[2,5,6,7],8)