基于人工智能的Python面试题

基于人工智能的Python面试题

1. Python中的元组与列表区别是什么?

  • 列表是可变类型,元组不是。
  • 列表是引用类型,元组不是。
  • 列表使用场景更宽泛,元组更多用于一些数据不可变的场景,例如参数、或者返回值。

2. Python中的字典 是否有序?

  • python3.6之前字典是无序的,之后是有序的。
  • 原因可以参考下这个帖子 https://blog.youkuaiyun.com/weixin_48629601/article/details/107683829

3. Python对深浅拷贝的理解?

  • 深浅拷贝主要是针对引用类型数据。
  • 深浅拷贝深浅定义只要是拷贝深度。
  • 浅拷贝,仅仅拷贝第一层数据。这样可能导致数据共享,有可能会不小心出现问题。
  • 深拷贝,递归拷贝所有数据。
  • 深浅拷贝主要针对符合数据类型嵌套出现的情况

4. 请问你在什么场景下使用lambda 表达式

  • lambda 表达式,又名匿名函数,是函数的一种。适合一些简单的函数转化成表达式,更便于书写。
  • lambda 更适合一些 回调 调用场景。也就是函数当做参数传递的时候场景
  • 排序的sorted方法, pandas的分组等相关的方法都支持这个使用等等。

5. 请问python中的round使用需要注意什么?

  • 适合一些对精度要求不高的场景。
  • 原因详细查看,面试能说上原因即可: https://www.bbsmax.com/A/LPdo6lME53/

6. 请问如何对一个列表数据去重,请尽可能多说明

li = [1,2,3,4,12,2,1,3,5,6,7,8,19,20,12,43,1314]
# 1. 原始遍历去重
new_li = []
for i in li:
    if i not in new_li:
        new_li.append(i)

# 2. 利用set特性去重,最便捷的方式
new_li_set = list(set(li))  

# 3. 利用字典的key唯一特性去重
new_li_dict = list({}.fromkeys(li).keys())

print(new_li)
print(new_li_set)
print(new_li_dict)
[1, 2, 3, 4, 12, 5, 6, 7, 8, 19, 20, 43, 1314]
[1, 2, 3, 4, 5, 6, 7, 8, 1314, 43, 12, 19, 20]
[1, 2, 3, 4, 12, 5, 6, 7, 8, 19, 20, 43, 1314]

7. 请问如何对一个是数字的列表中,删除里面的偶数,请尽可能用更多的方式

# 1. 首先我们要下说明,不能删除的原因. 删除元素后导致元素的索引发生变化。后的元组自动向前移动了

# 1. 利用while 循环删除
li = [1,2,2,3,3,4,4,5,6,8,8]
li_copy = li1.copy()
index=0
while index<len(li):
    if li[index]%2==0:
        li.remove(li[index])
        continue
    index+=1
print(li)

# 2. 保留奇数数值
new_li = [i for i in li_copy if i%2!=0]
print(new_li)

# 3.利用切片特性,切片等价于做了一个浅拷贝。这样遍历与删除就不是同一个列表
li1 = [1,2,2,3,3,4,4,5,6,8,8]
for i in li1[::]:
    if i%2==0:
        li1.remove(i)
print(li1)

# 4. 可以保留偶数在删除与上面类似
li3 = [1,2,2,3,3,4,4,5,6,8,8]
new_li3 = [i for i in li3 if i % 2==0]
for i in new_li3:
    li3.remove(i)
print(li3)
[1, 3, 3, 5]
[1, 3, 3, 5]
[1, 3, 3, 5]
[1, 3, 3, 5]

8. 请说下,下面的li1 li2 li3 的特点

li = [1,2,3]
li1 = li  
li2=li[::]  
li3 = li.copy()
  • 列表是引用类型,所以li1=li li1与li是一个对象,它们引用的同一块空间
  • li2 是在li基础上切片得到的,切片相当于一个浅拷贝.
  • li3 是调用的内置的copy,这个copy方法也是一个浅拷贝

9. 请说下对function tools中reduce的理解

  • reduce 用于迭代累计处理我们序列数据
  • 参数有2个 一个是回调函数是一个方法,一个是初始化值
  • 回调函数,有2个参数,第一个参数是累计运算的结果,第二个是当前迭代的元素
  • 初始值:如果不设置则把第一个元素作为 它的初始值

下面是源代码示例

def reduce(function, sequence, initial=_initial_missing):
    """
    reduce(function, sequence[, initial]) -> value

    Apply a function of two arguments cumulatively to the items of a sequence,
    from left to right, so as to reduce the sequence to a single value.
    For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
    ((((1+2)+3)+4)+5).  If initial is present, it is placed before the items
    of the sequence in the calculation, and serves as a default when the
    sequence is empty.
    """

    it = iter(sequence)

    if initial is _initial_missing:
        try:
            value = next(it)
        except StopIteration:
            raise TypeError("reduce() of empty sequence with no initial value") from None
    else:
        value = initial

    for element in it:
        value = function(value, element)

    return value

10. 请问如何反转一个字符串

# 1. 利用切片的反向切片操作
s = "abcdefg"
s1 = s[::-1]
print(s1)

# 2. 利用list的逆置与字符串拼接
li = list(s)
li.reverse()
s2 = "".join(li)
print(s2)

# 3. 传统的字符串遍历
s3 = ""
for ts in s:
    s3 = ts+s3
print(s3)
gfedcba
gfedcba
gfedcba

11. 如何交换2个变量的值

# 利用遍历的多变量赋值操作哈
a = 10
b = 20
b,a = a,b
print(a,b)
20 10

12. 发生循环导包的原因是什么,解决方法是什么?

  • 多个模块相互导入,在某个导入链上出现了循环。
  • 解决办法:打断这个导入链,可以考虑使用延时加载。当我们需要的时候再加载这个模块。 或者尝试调整导入顺序解决。

13. 请你说下 对super的理解?

  • super用于在继承关系中用于调用父类的方法,更多用于调用父类的初始化会更多一些。
  • super 返回的是一个mro顺序中的下一位的代理对象,这里可以简单对mro做个说明
  • super 返回的代理对象只能用于调用方法不能访问属性

14. 请问你用过自定义异常吗?

  • 答案要肯定:用过。
  • 做项目期间使用,简单能说上几个即可。 例如我们是调用训练模型的时候,一些错误我们可以定义成异常错误。例如: 加载模型异常错误,调用模型参数错误异常等

15. 如何创建一个Python的包模块,需要注意什么?

  • 在构建一个模块包的时候,内部模块推荐使用相对导包,这样方便我们的模块可以更好的被外部调用使用。

16. 请问 sys.path 作用?

  • sys.path 主要作用用于加载python模块使用的一个路径集合。当然一些动态库的路径也是在这个里面
  • 更多用于再我们构建项目的时候,更好的就加载模块使用。

17. 请问python的list 与 numpy的 Array区别?

  • 参考这个链接 https://jakevdp.github.io/PythonDataScienceHandbook/02.01-understanding-data-types.html

18. 请问python中的int 与 numpy 中的int64 区别是什么?

  • python3中的int大小无限制。python3之前两者是类似的都是64位的整数。
  • numpy int64 有固定大小 64位整数

19. is 与 == 的区别

  • is 是根据对象ID判断的
  • == 是根据值判断的

20. python __del__什么时候被调用

  • del 是对象被解释器回收的时候调用。
  • 显式的del 是相当于把引用计数置0,等待解释器回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值