面试题
- 写一个排序
def sort_list(arr):
if len(arr) <= 1:
return arr
privot = arr[len(arr) // 2]
left = [x for x in arr if x < privot]
middle = [x for x in arr if x == privot]
right = [x for x in arr if x > privot]
return sort_list(left) + middle + sort_list(right)
a = [2,3,5,4,9,6]
d = sort_list(a)
print(d)
- 保留浮点数两位小数
a = 1.021345
d = round(a,2)
print("%.02f"%a)
print(d)
- python 中的copy和deepcopy的区别
浅拷贝:
1.copy函数创建一个新的对象,但他不会递归复制对象中的内部对象,即他只复制对象本身,而不复制对象内部的对象。因此,原始对象和复制对象都会共享内部的子对象
2.浅拷贝适用于原始对象中包含的子对象不会被修改的情况,或者只需要复制对象本身而不是器内部元素时候
3.对于符合对象(例如列表字典等),浅拷贝会创建一个新的复合对象类型,但是复制的内容是对元对象中子对象的引用
深拷贝:
1。deepcopy函数创建一个新的对象,同时递归复制对象中的所有内部对象。因此原始对象和复制对象完全独立,对复制对象的修改不会影响原始对象。
2.深拷贝使用于原始对象中包含的子对象可能会被修改的情况,或者需要完全对立复制一个对象及其内部元素的时候。
3.对于符合对象,深拷贝不仅仅复制符合对象本身,也复制其中的元素,创建元素的完整副本
- 将[i for i in range(3)]改为生成器
a = [i for i in range(3)]
b = (i for i in range(3))
print(a)
print(b)
# 输出结果
[0, 1, 2]
<generator object <genexpr> at 0x0000028A966A0CC8>
- 去除字符串种的空格
a = " asd "
a.strip()
a.replace(" ", "")
6.sort和sorted的区别
sort在list的基础上修改无返回值,sorted返回新的list
a = [1,213,12,541,24,124,52,35,12,3]
a.sort()
print(a)
b = [1,213,12,541,24,124,52,35,12,3]
b = sorted(b)
print(b)
- 对list进行排序,使用lambda进行从小到大排序
b = [1,213,12,541,24,124,52,35,12,3]
d = sorted(b, key=lambda x:x )
- 列表嵌套字典,分别根据年龄和姓名进行排序
f = [{'name': 'df', 'age': 23}, {'name': 'll', 'age': 54}, {'name': 'wa', 'age': 17}, {'name': 'zs', 'age': 19}]
d = sorted(f, key=lambda x:x['name'])
print(d)
d = sorted(f, key=lambda x:x['age'])
print(d)
- 用zip根据字典键排序
dic = {"name":"zs","sex":"man","city":"bj"}
foo = zip(dic.keys(),dic.values())
foo = [i for i in foo]
print("字典转成列表嵌套元组",foo)
b = sorted(foo,key= lambda x:x[0])
print("根据键排序",b)
new_dic = {i[0]:i[1] for i in b}
print("字典推导式构造新字典",new_dic)
- 使用re的split进行切分字符串
import re
s="info:xiaoZhang 33 shandong"
res = re.split(":| ",s )
print(res)
10.python传参数是传值还是传址?
在python种,传递参数可以看作是传对象引用,这种方式即不同于传值也不同于传址的传统概念,而是介于两者之间的一种方式。理解这一点,关键是要明天白在python种,所有的东西都是对象,变量是对对象的应用。