Python相关题-数据类型
数据类型 - 列表
30. 已知AList = [1, 2, 3, 1, 2],对AList列表元素去重,写出具体过程。
答:list(set(AList))
31.如何实现"1,2,3"变成["1", "2", "3"]
答:
s = "1,2,3"
print(s.split(","))
32. 给定两个list,A和B,找出相同元素和不同元素
答:
A、B中相同元素:
print(set(A) & set(B))
A、B中不同元素:
print(set(A) ^ set(B))
33. [[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)
34. 合并列表[1, 5, 7, 9]和[2, 2, 6, 8]
答: 使用extend和 + 都可以。
a = [1, 5, 7, 9]
b = [2, 2, 6, 8]
a.extend(b)
print(a)
35. 如何打乱一个列表的元素?
答:
import random
a = [1, 2, 3, 4, 5]
random.shuffle(a)
print(a)
数据类型 - 字典
36. 字典操作中del 和pop有什么区别
答: del 可以根据索引(元素所在位置)来删除的,没有返回值。 pop可以根据索引弹出一个值,然后可以接收它的返回值。
37.按照字典的内的年龄排序
d1 = [
{'name':'alice', 'age':38},
{'name':'bob', 'age':18},
{'name':'Carl', 'age':28},
]
答:
print(sorted(d1, key=lambda x:x["age"]))
38.请合并下面两个字典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})
39. 如何使用生成式的方式生成一个字典,写一段功能代码
答:# 需求 3: 把字典的 key 和 value 值调换;
d = {'a':'1', 'b':'2'}
print({v:k for k, v in d.items()})
40. 如何把元组("a", "b")和元组(1, 2),变为字典{"a":1, "b":2}
答: zip的使用,但是最后记得把zip对象再转换为字典。
a = ("a", "b")
b = (1, 2)
print(dict(zip(a, b)))
数据类型 - 综合
41. 下列字典对象键类型不正确的是?
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)] 改成生成器
答:通过把列表生产式的中括号,改为小括号我们就实现了生产器的功能即,
(i for i in range(3))
46. a = "hello"和b = "你好"编码成bytes类型
答: 这个题目一共三种方式,第一种是在字符串的前面加一个b,第二种可以使用bytes方法,第三种使用字符串encode方法。具体代码如下,
abc代表三种情况
a = b"hello"
b = bytes("你好", "utf-8")
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
答: 前面我说了元组的里元素是不能改变的,这句话严格来说是不准确的,如果元组里面元素本身就是可变类型,比如列表,那么在操作这个元素里的对象时,其内存地址也是不变的。
a[3]对应的元素是列表,然后对列表第一个元素赋值,所以最后的结果是: (1, 2, 3, [2, 5, 6, 7], 8)