题目来源于机器学习面试题目
函数式编程和面向对象区别?
(1)面向对象利用对象、类、封装、继承、多态等概念来组织和实现代码程序,对象是指有特定属性和行为的实体,同一类的对象可以共享属性和方法,类定义了对象的通用属性和方法,因此可以方便地创建新的对象。通过“继承”和“封装”等机制,可以让代码更加简洁、易于维护和扩展。
(2)函数式编程核心思想是把程序看作数学上的函数计算,其不同于面向对象,更加强调函数的透明化和形式化,避免了数据共享和可变状态,强调纯函数的使用。一个复杂的问题可以被分解为多个简单的函数,函数式编程通常更加容易实现模块化和代码重用,也更容易进行并行计算和测试。
python list和tuple的区别
列表是可变的,可以对它进行修改和删除元素的操作;
元组是不可变的,一旦创建就不能改变。
说一下python里啥叫生成器
生成器是一种特殊的函数,可以在执行时生成一系列值,而不是一次性把所有值都返回,这样的好处就是可以节省内存。
python is ==的区别
python中的is是比较两个对象地址是否相同,而==运算符是比较两个对象值是否相同的
map的底层实现
map(function,iterable)是对可迭代对象中的每个元素应用一个函数,并返回一个新的可迭代对象。
map的底层实现是通过迭代器来完成的。它会创建一个新的迭代器对象,该对象对传入的序列进行遍历,将元素依次传递给函数进行处理,map函数将处理后的结果保存在列表中,该列表将作为迭代器返回。
python方法解析顺序
如何判断两个dict是否一样
(1)直接用==比较
(2)比较键和值是否相同:
# 判断两个字典是否相同
dict1 = {'name': 'Alice', 'age': 20}
dict2 = {'age': 20, 'name': 'Alice'}
for key in dict1:
if key not in dict2 or dict1[key] != dict2[key]:
print("dict1和dict2不相同")
break
else:
print("dict1和dict2相同")
(3)本来字典是无序的,转化为元组列表进行比较
# 判断两个字典是否相同
dict1 = {'name': 'Alice', 'age': 20}
dict2 = {'age': 20, 'name': 'Alice'}
#dict1.items()返回结果是列表里面嵌套元组
tuple1 = sorted(dict1.items())
tuple2 = sorted(dict2.items())
if tuple1 == tuple2:
print("dict1和dict2相同")
else:
print("dict1和dict2不相同")
深浅拷贝
使用浅拷贝时,会创建一个新的对象,该对象和原对象共享内存中的一部分数据甚至是全部数据,所以修改其中一个对象的值会影响另一个对象。
深拷贝会创建一个新的对象,该对象递归的复制其包含的所有对象,这意味着新对象和原始对象之间没有任何的关联,修改其中一个对象的值不会影响另一个对象。
python锁机制
锁是用来保护共享资源的机制。当多个线程同时访问一个共享资源时,为了防止它们之间发生竞争条件(Race Condition),需要使用锁来确保同一时间只有一个线程可以访问该资源。
如何在list头上删元素
#可删除列表的第一个元素
list.pop(0)
my_dict = {'apple': 15, 'banana': 10, 'orange': 20, 'grape': 5}
sorted_list = sorted(my_dict.items(), key=lambda x: x[1])
print(sorted_list)
list = [0,1,2,3,4,0]
list1 = [x for x in l if x!=0]
(2)循环遍历,再用del删除列表元素
my_list = [0, 1, 2, 0, 3, 0, 4]
i = 0
while i < len(my_list):
if my_list[i] == 0:
del my_list[i]
else:
i += 1
a,b = b,a
(2)临时变量法
15. 怎么定义一个类的成员变量
16. list dict有什么区别
(1)列表是有序的,可以通过索引访问元素,字典是无序的,由键值对构成的,可以通过键来访问相应的值。
(2) 列表可以存储任意类型的对象;字典中的键必须是不可变对象,例如数字、字符串或元组,而值可以是任意类型的对象。
key-value的数据结构
key-value数据结构可以通过多种不同的方式实现:字典、哈希表、映射(map)
其中,字典以哈希表的形式实现快速查找和插入操作;
哈希表是一种使用哈希函数来确定键值对位置的数据结构。在哈希表中,每个键都被哈希成一个索引,然后将其映射到相应的值;
映射是一种将键映射到值的抽象数据类型。
list 底层怎么实现
其底层实现主要依赖于C语言,在内存中以数组的形式进行存储。
具体来说,Python的列表被实现为一个指针数组。每个元素都是一个指向对象的指针,而不是对象本身。这意味着列表可以容纳任何类型的对象,包括数字、字符串和其他复杂类型的对象。
dict底层如何实现
其底层实现主要依赖于哈希表。
具体来说,Python的字典被实现为一个哈希表,其中每个元素都是一个键值对。当我们向字典添加一个元素时,Python会根据该元素的键来计算出一个哈希值,并将其作为索引存储到哈希表中。当我们需要查找某个键时,Python会重新计算出相应的哈希值,并从哈希表中查找该键对应的值。
python中数组去重怎么做?具体代码?
(1)利用集合
a = [1, 2, 3, 3, 4, 4, 5]
new_a = list(set(a))
print(new_a)
(2)利用列表推导式
a = [1, 2, 3, 3, 4, 4, 5]
new_a = []
[new_a.append(i) for i in a if i not in new_a]
print(new_a)