python面试学习

题目来源于机器学习面试题目

  1. 函数式编程和面向对象区别?
    (1)面向对象利用对象、类、封装、继承、多态等概念来组织和实现代码程序,对象是指有特定属性和行为的实体,同一类的对象可以共享属性和方法,类定义了对象的通用属性和方法,因此可以方便地创建新的对象。通过“继承”和“封装”等机制,可以让代码更加简洁、易于维护和扩展。
    (2)函数式编程核心思想是把程序看作数学上的函数计算,其不同于面向对象,更加强调函数的透明化和形式化,避免了数据共享和可变状态,强调纯函数的使用。一个复杂的问题可以被分解为多个简单的函数,函数式编程通常更加容易实现模块化和代码重用,也更容易进行并行计算和测试。

  2. python list和tuple的区别
    列表是可变的,可以对它进行修改和删除元素的操作;
    元组是不可变的,一旦创建就不能改变。

  3. 说一下python里啥叫生成器
    生成器是一种特殊的函数,可以在执行时生成一系列值,而不是一次性把所有值都返回,这样的好处就是可以节省内存。

  4. python is ==的区别
    python中的is是比较两个对象地址是否相同,而==运算符是比较两个对象值是否相同的

  5. map的底层实现
    map(function,iterable)是对可迭代对象中的每个元素应用一个函数,并返回一个新的可迭代对象。
    map的底层实现是通过迭代器来完成的。它会创建一个新的迭代器对象,该对象对传入的序列进行遍历,将元素依次传递给函数进行处理,map函数将处理后的结果保存在列表中,该列表将作为迭代器返回。

  6. python方法解析顺序

  7. 如何判断两个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不相同")
  1. 深浅拷贝
    使用浅拷贝时,会创建一个新的对象,该对象和原对象共享内存中的一部分数据甚至是全部数据,所以修改其中一个对象的值会影响另一个对象。
    深拷贝会创建一个新的对象,该对象递归的复制其包含的所有对象,这意味着新对象和原始对象之间没有任何的关联,修改其中一个对象的值不会影响另一个对象。

  2. python锁机制
    锁是用来保护共享资源的机制。当多个线程同时访问一个共享资源时,为了防止它们之间发生竞争条件(Race Condition),需要使用锁来确保同一时间只有一个线程可以访问该资源。

  3. 如何在list头上删元素

#可删除列表的第一个元素
list.pop(0)
  1. 一个python的dict,按照key-value存储,如何按照value排序
my_dict = {'apple': 15, 'banana': 10, 'orange': 20, 'grape': 5}
sorted_list = sorted(my_dict.items(), key=lambda x: x[1])
print(sorted_list)
  1. 字符串拼接(join)
    “连接符号”.join(序列),输出结果为一整个字符串
  2. 对一个列表删除所有为0的数字
    (1)利用列表推导式,其表示形式为:[新元素表达式 for 临时变量 in 可迭代对象 if 条件表达式]
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
  1. 交换数字a,b
    (1)元组赋值
a,b = b,a

(2)临时变量法
15. 怎么定义一个类的成员变量
16. list dict有什么区别
(1)列表是有序的,可以通过索引访问元素,字典是无序的,由键值对构成的,可以通过键来访问相应的值。
(2) 列表可以存储任意类型的对象;字典中的键必须是不可变对象,例如数字、字符串或元组,而值可以是任意类型的对象。

  1. key-value的数据结构
    key-value数据结构可以通过多种不同的方式实现:字典、哈希表、映射(map)
    其中,字典以哈希表的形式实现快速查找和插入操作;
    哈希表是一种使用哈希函数来确定键值对位置的数据结构。在哈希表中,每个键都被哈希成一个索引,然后将其映射到相应的值;
    映射是一种将键映射到值的抽象数据类型。

  2. list 底层怎么实现
    其底层实现主要依赖于C语言,在内存中以数组的形式进行存储。
    具体来说,Python的列表被实现为一个指针数组。每个元素都是一个指向对象的指针,而不是对象本身。这意味着列表可以容纳任何类型的对象,包括数字、字符串和其他复杂类型的对象。

  3. dict底层如何实现
    其底层实现主要依赖于哈希表。
    具体来说,Python的字典被实现为一个哈希表,其中每个元素都是一个键值对。当我们向字典添加一个元素时,Python会根据该元素的键来计算出一个哈希值,并将其作为索引存储到哈希表中。当我们需要查找某个键时,Python会重新计算出相应的哈希值,并从哈希表中查找该键对应的值。

  4. 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)

你可能感兴趣的:(python学习,杂七杂八,python,面试)