python面试常见问题及知识点整理之列表、字典与综合部分
等我想个好名字
• 数据类型 - 列表
1.已知 AList = [1,2,3,1,2]
,对 AList 列表元素去重,写出具体过程。
2.如何实现 "1,2,3" 变成 ["1","2","3"]
3.给定两个 list,A 和 B,找出相同元素和不同元素
4. [[1,2],[3,4],[5,6]]
一行代码展开该列表,得出 [1,2,3,4,5,6]
5. 合并列表 [1,5,7,9]
和 [2,2,6,8]
6. 如何列表的元素?
• 数据类型 - 字典
1.字典操作中 del 和 pop 有什么区别
2. 按照字典的内的年龄排序
d1 = [ {'name':'alice', 'age':38}, {'name':'bob', 'age':18}, {'name':'Carl', 'age':28}, ]
3. 请合并下面两个字典 a = {"A":1,"B":2}
,b = {"C":3,"D":4}
4. 如何使用生成式的方式生成一个字典,写一段功能代码。
5. 如何把元组 ("a","b")
和元组 (1,2)
,变为字典 {"a":1,"b":2}
• 数据类型 - 综合
1.下列字典对象键类型不正确的是?
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}
2. 如何交换字典 {"A":1,"B":2}的键和值
3. Python 里面如何实现 tuple 和 list 的转换?
4. 我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?
5. 请将 [i for i in range(3)]
改成生成器
6. a="hello" 和 b="你好" 编码成 bytes 类型
7. 下面的代码输出结果是什么?
a = (1,2,3,[4,5,6,7],8) a[2] = 2
8. 下面的代码输出的结果是什么?
a = (1,2,3,[4,5,6,7],8) a[3][0] = 2
列表:
1.已知 AList = [1,2,3,1,2]
,对 AList 列表元素去重,写出具体过程。
答:
list(set(AList))
2.如何实现 "1,2,3" 变成 ["1","2","3"]
答:
s = "1,2,3" print(s.split(","))
3.[[1,2],[3,4],[5,6]] 一行代码展开该列表,得出 [1,2,3,4,5,6]
答:
l = [[1,2],[3,4],[5,6]] x=[j for i in l for j in i] print(x)
4.合并列表 [1,5,7,9] 和 [2,2,6,8]
答:使用 extend 和 + 都可以。
a = [1,5,7,9] b = [2,2,6,8] a.extend(b) print(a)
5.如何打乱一个列表的元素?
答:
import random a = [1, 2, 3, 4, 5] random.shuffle(a) print(a)
数据类型 - 字典
1.字典操作中 del 和 pop 有什么区别
答:
del 可以根据索引(元素所在位置)来删除的,没有返回值。 pop 可以根据索引弹出一个值,然后可以接收它的返回值。
2.按照字典的内的年龄排序
d1 = [ {'name':'alice', 'age':38}, {'name':'bob', 'age':18}, {'name':'Carl', 'age':28}, ]
答:
d1 = [ {'name': 'alice', 'age': 38}, {'name': 'bob', 'age': 18}, {'name': 'Carl', 'age': 28}, ] print(sorted(d1, key=lambda x:x["age"]))
3.请合并下面两个字典 a = {"A":1,"B":2},b = {"C":3,"D":4}
答:
合并字典方法很多,可以使用 a.update(b) 或者下面字典解包的方式
a = {"A":1,"B":2} b = {"C":3,"D":4} print({**a,**b})
4.如何使用生成式的方式生成一个字典,写一段功能代码。
答:
# 需求 3: 把字典的 key 和 value 值调换; d = {'a':'1', 'b':'2'} print({v:k for k,v in d.items()})
5.如何把元组 ("a","b") 和元组 (1,2),变为字典 {"a":1,"b":2}
答 :
zip 的使用,但是最后记得把 zip 对象再转换为字典。
a = ("a", "b") b = (1, 2) print(dict(zip(a, b)))
数据类型 - 综合
1.下列字典对象键类型不正确的是?
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 对象,所以不能用列表做为字典的键。
2.如何交换字典 {"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()))
3.Python 里面如何实现 tuple 和 list 的转换?
答:
Python 中的类型转换,一般通过类型强转即可完成 tuple 转 list 是 list() 方法 list 转 tuple 使用 tuple() 方法
4.我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?
答:
这个题目考察了 Python 标准库的 itertools 模快的掌握情况,该模块提供了操作生成器的一些方法。 对于生成器类型我们使用 islice 方法来实现切片的功能。例子如下
from itertools import islice gen = iter(range(10)) #iter()函数用来生成迭代器 #第一个参数是迭代器,第二个参数起始索引,第三个参数结束索引,不支持负数索引 for i in islice(gen,0,4): print(i)
5.请将 [i for i in range(3)] 改成生成器
答:通过把列表生产式的中括号,改为小括号我们就实现了生产器的功能即,
(i for i in range(3))
6.a="hello" 和 b="你好" 编码成 bytes 类型
答:
这个题目一共三种方式,第一种是在字符串的前面加一个 b,第二种可以使用 bytes 方法,第三种使用字符串 encode 方法。具体代码如下,abc 代表三种情况
a = b"hello" b = bytes("你好", "utf-8") c = "你好".encode("utf-8") print(a, b, c)
7.下面的代码输出结果是什么?
a = (1,2,3,[4,5,6,7],8) a[2] = 2
答:
我们知道元组里的元素是不能改变的所以这个题目的答案是出现异常。
8.下面的代码输出的结果是什么?
a = (1,2,3,[4,5,6,7],8) a[3][0] = 2
答:
前面我说了元组的里元素是不能改变的,这句话严格来说是不准确的,如果元组里面元素本身就是可变类型,比如列表,那么在操作这个元素里的对象时,其内存地址也是不变的。a[3] 对应的元素是列表,然后对列表第一个元素赋值,所以最后的结果是:
(1,2,3,[2,5,6,7],8)