Python面试整理(四)

数据类型

1.Python里面如何实现tuple和list的转换?
  • 1、元组转列表
    方法:list( tup),tup要转换为列表的元组
    返回值:返回转换后的列表。
  • 2、列表转元组
    方法:tuple(lis),lis要转换为元组的列表
    返回值:返回转换后的元组
2.列表和元组有什么不同?
  • 列表属于可变序列,它的元素可以随时修改或删除,元组是不可变序列,其中元素不可修改,只能整体替换。
  • 列表可以使用append()、extend()、insert()、remove()和pop()等方法实现添加和修改,元组则没有这几个方法。
  • 列表可以使用切片访问和修改列表中的元素,元组也支持切片,但是它只能通过切片访问。
  • 元组比列表的访问和处理速度快,如果只需要访问不需要修改,建议使用元组。
  • 列表不能作为字典的键,而元组则可以。
3. Python中, list, tuple, dict, set有什么区别, 主要应用在什么样的场景?
  • list:列表(链表的数据结构)有序的项目, 通过索引进行查找,使用方括号”[]”;
  • tuple:元组 元组将多样的对象集合到一起,不能修改,通过索引进行查找,使用括号”()”;
  • dict:字典 字典是一组键(key)和值(value)的组合,通过键(key)进行查找,没有顺序, 使用大括号”{}”;
  • set:集合 无序,元素只出现一次, 自动去重,使用”set([])”
    应用场景:
  • list, 简单的数据集合,可以使用索引;
  • tuple, 把一些数据当做一个整体去使用,不能修改;
  • dict,使用键值和值进行关联的数据;
  • set,数据只出现一次,只关心数据是否出现, 不关心其位置;
4.有两个序列a,b,大小都为n,序列元素的值任意整形数,无序?要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。
  1. 将两序列合并为一个序列,并排序,为序列Source
  2. 拿出最大元素Big,次大的元素Small
  3. 在余下的序列S[:-2]进行平分,得到序列max,min
  4. 将Small加到max序列,将Big加大min序列,重新计算新序列和,和大的为max,小的为min。
5.在Python中如何使用多进制数字?
  • 1、二进制数字由0和1组成,我们使用0b或0B前缀表示二进制数
  • 2、使用bin()函数将一个数字转换为它的二进制形式
  • 3、八进制数由数字0-7组成,用前缀0o或0O表示8进制数
  • 4、十六进数由数字0-15组成,用前缀0x或者0X表示16进制数
6.元组的解封装是什么?

首先我们来看解封装:
mytuple=3,4,5
mytuple
(3, 4, 5)
这将 3,4,5 封装到元组 mytuple 中。
现在我们将这些值解封装到变量 x,y,z 中:
x,y,z=mytuple
x+y+z
得到结果12

7. python实现列表去重的方法
# 使用for循环实现列表去重
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
list2 = []
for l1 in list1:
    if l1 not in list2:
        list2.append(l1)
print(list2)

结果:[‘a’, ‘b’, 1, 3, 9]

# 使用列表推导式去重
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
res = []
[res.append(i) for i in list1 if i not in res]
print(res)
结果:[‘a’, ‘b’, 1, 3, 9]

# set()列表去重
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
list2 = list(set(list1))
print(list2)
结果:[1, 3, 9, ‘b’, ‘a’]
问题:使用set()函数去重后,会自动排序,则原列表的顺序会发生改变
解决办法有2种:
第一种方法,使用sort()方法
# # 第一种方法,sort()
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
list2 = list(set(list1))
list2.sort(key=list1.index)
print(list2)
结果:[‘a’, ‘b’, 1, 3, 9]
注:sort()方法没有返回值,对列表元素进行原地排序
第二种方法,使用sorted()函数
# 第二种方法,sored()
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
list2 = sorted(list(set(list1)), key=list1.index)
print(list2)
结果:[‘a’, ‘b’, 1, 3, 9]
注:python内置函数sorted()函数返回新的列表,并不对原列表做任何修改

# 使用新建字典实现列表去重
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
dic = {}
dic = dic.fromkeys(list1).keys()
print(list(dic))
结果:[‘a’, ‘b’, 1, 3, 9]

# 删除存在重复的值,不保留
list1 = ['a', 'b', 1, 3, 9, 9, 'a']
list2 = [i for i in list1 if list1.count(i) == 1]
print(list2)
结果:[‘b’, 1, 3]
8.假设list1是[2,33,2,14,25],什么是list1 [-1]?

25

9.怎样获取字典中所有键的列表?

1.只遍历键时可以使用keys(), 还可以使用sorted() 进行排序
2. 只遍历值时可以使用values(), 可以使用set()去重
3. 遍历字典的所有key和value, 使用items()

10.字典如何删除键和合并两个字典
  • 删除键:del[‘键值’]
  • 合并:d = dict(list(d1.items()) + list(d2.items()))
11. python内建数据类型有哪些

字符型(string)、数字(number)、元组(tuple)、列表(list)、字典(dict)、集合(set)

12.python中生成随机整数、随机小数、0–1之间小数方法
import random
import numpy as np
 
a = random.randint(10,20)
res = np.random.randn(5)
ret = random.random()
print("正整数:"+str(a))
print("5个随机小数:"+str(res))
print("0-1随机小数:"+str(ret))
13.列出python中可变数据类型和不可变数据类型,并简述原理
  • 可变数据类型 :当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型
  • 不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称不可变数据类型
  • 可变数据类型有:列表,集合,字典
14.字典根据键从小到大排序
#初始化字典
a = { "b": 5, "c": 2,"a": 4, "d": 1}
#对字典按键(key)进行排序(默认由小到大)
test=sorted(a.items(),key=lambda x:x[0])
#输出结果
print(test) # [('a', 4), ('b', 5), ('c', 2), ('d', 1)]
15.列表推导式求列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#方法1:使用filter函数第一种实现方式
a = [1,2,3,4,5,6,7,8,9,10]
def func(n):
        return n%2 ==1
list1 =list(filter(func,a))
print('filter奇数组表结果:',list1)
#使用filter函数第二种实现方式
x = [1,2,3,4,5,6,7,8,9,10]
list2 =filter(lambda x:x%2==1,x)
print('filter奇数组表结果2:',list(list2))

#方法2:列表推导式求列表所有奇数并构造新列表
a = [1,2,3,4,5,6,7,8,9,10]
a = [ i for i in a if i%2!=0]# 非偶数
print("filter奇数组表结果",a)

16.a=(1,)b=(1),c=(“1”) 分别是什么类型的数据?

元组、整数、字符串

17.两个列表[1,5,7,9]和[2,2,6,8]合并为[1,2,2,3,6,7,8,9]
list1 = [1,5,7,9]
list2 = [2,2,6,8]
list1.extend(list2)  #合并两个列表
print(list1)
list1.sort(reverse = False) #对列表进行排序
print(list1)
18.[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]
old = [[1, 2], [3, 4], [5, 6]]
# 从old中一个一个取出值,对取出的值(i)再进行一次遍历取值操作(也可以进行判断或者运算)
new = [j for i in old for j in i]
print(new)
19. x=“abc”,y=“def”,z=[“d”,“e”,“f”],分别求出x.join(y)和x.join(z)返回的结果
  • x.join(y):‘dabceabcf’
  • x.join(z):‘dabceabcf’
20.a="hello"和b="你好"编码成bytes类型
a="hello"
c=a.encode(encoding='utf-8')
a = b'hello'
b="你好"
b = b.encode(encoding='utf-8')
print(a,b,c)
21.[1,2,3]+[4,5,6]的结果是多少?

[1,2,3,4,5,6]

22. 举例sort和sorted对列表排序,list=[0,-1,3,-10,5,9]
#列表排序
list=[0,-1,3,-10,5,9]
list.sort(reverse=False)
print("list.sort在list基础上修改,无返回值"list)

list=[0,-1,3,-10,5,,9]
res=sorted(List,reverse=False)
print("sorted有返回值是新的list",list)
print("返回值",res)

23.对list排序foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4],使用lambda函数从小到大排序
foo = [-5,8,0,4,9,-4,-20,-2,8,2,-4]
g=lambda L:sorted(L)
print(g(foo))
#法二
a=sorted(foo,key=lambda x:x)
print(a)

24.Python中的字典是什么?

字典是数据的无序集合,用于存储数据值

25.列表嵌套元组,分别按字母和数字排序
foo = [("zs",19),("ll",54),("wa",17),("df",23)]
f1=sorted(foo,key=lambda x:x[0])
print(f1)
f2=sorted(foo,key=lambda x:x[1])
print(f2)

26.列表推导式、字典推导式、生成器

列表推导式通常是条件推导式结合循环使用,其返回的也是列表
语法1:[A for i in data] # 对data中的数据遍历,返回A
语法2:[A for i in data if condition] # 对data中的数据遍历,满足condition的返回A,不满足则不返回
语法3:[A if condition else B for i in data] # 对data中的数据遍历,满足condition的返回A,不满足则返回B

字典推导与列表推导式类似,返回为字典
语法1:{key:value for key,value in dict.items()} # 对字典dict遍历,构建新的字典(字典复制)
语法2:{key:value for key,value in dict.items() if condition} # 对字典dict遍历,提取满足条件的关键字和对应值
语法3:{key:value if condition else self-value for key,value in dict.items()} # 对字典dict遍历,修改不满足条件关键字的对应值
生成器:result=(10*i if i%2 else 20*i for i in range(10))

27.解释Python中的join()和split()函数

join用来连接字符串,split恰好相反,拆分字符串的。

28.python字典和json字符串相互转化方法
  • json.dumps()
  • json.loads()
29.求两个列表的交集、差集、并集
a=[1,2,3,4]
b=[4,3,5,6]
J=list(set(a)&set(b))#交集
print(J)
B=list(set(a)|set(b))#并集
print(B)
C=list(set(a)-set(b))#交集,a有b没有的元素
print(C)
30. python中读取Excel文件的方法

open()

31.如何以就地操作方式打乱一个列表的元素?
import random
i=[1,2,3]
random.shuffle(l) 
32.docstring是什么?

Docstring是一种文档字符串,用于解释构造的作用

33.什么是切片?

就是从一个序列上根据元素的索引获取到指定位置的单个或者是多个元素

34.什么是namedtuple ?

namedtuple是继承自tuple的子类

35. Python中的不可变集合(frozenset)是什么?

frozenset是不可变的集合, 简单说就是不能修改的set集合

36.写一个列表生成式,产生一个公差为11的等差数列
print([x*11 for x in range(10)])
37.给定两个list A,B ,请用找出A,B中相同与不同的元素
#A、B 中相同元素:
print(set(A)&set(B)) 
#A、B 中不同元素:
print(set(A)^set(B))
38.如何在一个function里面设置一个全局的变量?

在function的开始插入一个global声明。

39.[:: - 1}表示什么?

表示切片从后往前开始截取,步长是1。

40.如果将一个列表传入函数中,在函数中修改后,全局的列表会被修改吗?

会被修改,作为参数传入函数内部,内部修改相当于修改外部的列表。

41. 字典和json的区别
  • 字典是一种数据结构,是python中的一种数据类型
  • Json是一种打包的数据格式,本质上是字符串,也是按照 key:value 来存储数据,key 只能是字符串,且可以有序、重复;必须使用双引号作为key或者值的边界符,不能使用单引号,使用单引号或者不使用引号会使解析错误。可以被解析为字典或者其他形式。
42.Python数组和列表有什么区别?
  • 创建方式不同
  • 元素不同
  • 运算方式不同
43.NumPy中有哪些操作Python列表的函数?
  • array(创建数组)
  • zeros((n,m))和ones((n,m))(创建数组中的元素全为1或0),其中n表示创建数组的行数,m表示列数
  • empty((n,m))(创建一个元素为随机的数组)
  • arange(起始数,结尾数,步长) (创建等差数组)
44.常用的字符串格式化
  • %格式化法
  • f格式化法
  • format格式化法
45.字符串驻留机制

字符串驻留机制的定义:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串的驻留池中。python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。

46.列举字符串、列表、元组、字典的5个常用方法

字符串:
1,find通过元素找索引,可切片,找不到返回-1
2,index,找不到报错。
3,split 由字符串分割成列表,默认按空格。
4,captalize 首字母大写,其他字母小写。
5,upper 全大写。

列表:
append:在后面添加。
Insert按照索引添加,
expend:迭代着添加。
list.extend(seq) -在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列)
pop 删除 (pop 有返回值)

元组:
()元组的元素不能修改
1、cmp(tuple1, tuple2):比较两个元组元素。
2、len(tuple):计算元组元素个数。
3、max(tuple):返回元组中元素最大值。
4、min(tuple):返回元组中元素最小值。
5、tuple(seq):将列表转换为元组。

字典
key: 输出所有的键
clear:清空
dic:删除的键如果没有则报错
pop:键值对删,有返回,没有原来的键会报错(自行设置返回键就不会报错)
popitem:随机删键值对
del:删除的键如果没有则报错

47.什么是反射,以及应用场景

反射就是通过字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动
可使用反射的地方:
1、反射类中的变量 : 静态属性,类方法,静态方法
2、反射对象中的变量、对象属性、普通方法
3、 反射模块中的变量
4、反射本文件中的变量

48.列表和迭代器的区别
  • 列表不论遍历多少次,表头位置始终是第一个元素;
  • 迭代器遍历结束后,不再指向原来的表头位置,而是为最后元素的下一个位置;
49.enumerate的作用

enumerate函数是将一个可迭代对象中元素,按元素顺序每个增加一个索引值,将其组成一个索引序列,利用它可以同时获得索引和值,这样做的目的是为了将一个可迭代对象中元素组成一个“索引,值”对便于后续操作。

50.描述数组、链表、队列、堆栈的区别?
  1. 队列可以看成是有2个口的集合一个口叫队头一个叫队尾,只能在对头进行删除操作,在队尾做插入。根据这样的操作。队列特点是先进先出
  2. 堆栈可以看成是有1个口的集合,这个口叫栈顶。插入和删除操作只能在栈顶操作。根据这样的操作。堆栈的特点是是后进先出.
  3. 链表是一种存储方式,它可以在 非连续的内存空间里面存储一个集合的元素。
  4. 数组属于顺序存储中,由于每个元素的存储位置都可以通过简单计算得到,所以访问元素的时间都相同(直接访问数组下标)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值