【华为OD技术面试真题 - 技术面】- python面试题(3)

本文汇总了华为OD面试中的Python基础知识,包括常用数据结构(如列表、元组、字典、集合)的特点和使用场景,解释了在查询为主、插入删除少的情况下选择数组的原因,对比了数组与元组的区别,讨论了二叉树的遍历方式,回顾了排序算法,并介绍了Python中的进程与协程,以及return和yield的区别,最后阐述了Python中可变和不可变对象的重要性和影响。

华为OD面试真题题库

专栏:华为OD面试真题题库
目录: 最新华为OD面试手撕代码真题目录以及八股文真题目录

封面

1. python 常用的数据结构都有什么

  1. 列表(List)

    • 功能:列表是可变的序列,能够存储不同类型的元素。
    • 特点:支持增加、删除、访问元素等操作,支持索引和切片操作。
    • 使用场景:适用于需要顺序访问的情况,或当你需要经常修改数据时。
  2. 元组(Tuple)

    • 功能:元组是不可变的序列,一旦创建便不能修改。
    • 特点:比列表访问速度快,可以用作字典的键(以及其他原生不可变类型)。
    • 使用场景:适用于存储不应改变的数据元素,如函数的返回值。
  3. 字典(Dictionary)

    • 功能:字典存储键值对,其中键必须是唯一的。
    • 特点:通过键而非索引访问元素,查找速度快。
    • 使用场景:适用于通过键快速检索、插入或删除数据项的场景。
  4. 集合(Set)

    • 功能:集合是一个无序的元素集,自动去除重复元素。
    • 特点:提供高效的成员检查,可以进行数学上的集合操作,如并集、交集、差集等。
    • 使用场景:适用于需要元素唯一性的场景,或需要进行集合运算的地方。
  5. 字符串(String)

    • 功能:字符串是字符的不可变序列。
    • 特点:提供丰富的方法和操作,如切片、连接、查找等。
    • 使用场景:处理文本数据的任何场景。
  6. 双端队列(Deque)

    • 功能:来自collections模块,Deque是一个从两端都可以快速增加和弹出的队列。
    • 特点:当你需要一个从头部和尾部都可以快速添加或删除的列表时,比列表更有效。
    • 使用场景:适用于需要队列操作的场景,如在任务队列的头部或尾部添加或移除任务。
  7. 堆(Heap)

    • 功能:通过heapq模块实现,堆是一个特殊的完全二叉树。
    • 特点:在堆中,最小元素总是位于顶部。heapq提供了操作堆的方法,如heappushheappop
    • 使用场景:适用于需要频繁访问最小元素但不需要全部排序的数据结构。

2. 需要大量的查询, 而且删除与插入很少, 那么应该用链表还是数组?

在面对这样的场景,即需要大量的查询操作,而且删除与插入操作很少时,通常使用数组(在Python中表现为列表)而不是链表。

  1. 查询效率

    • 数组:数组提供通过索引的直接访问,其访问时间复杂度为 O(1)。这意味着无论要访问数组中的哪个元素,所需时间都是常数级别的。
    • 链表:链表的查询效率较低,因为链表不支持随机访问。要访问链表中的一个元素,可能需要从头节点开始逐一访问后续节点,最坏情况下的时间复杂度为 O(n),n 是链表长度。
  2. 插入与删除操作

    • 虽然链表在插入和删除操作时通常优于数组(因为链表的插入和删除操作时间复杂度为 O(1),而数组为 O(n)),但应用场景中这些操作较少,这一优势并不明显。
  3. 内存利用率

    • 数组:数组在内存中占用连续空间,这有助于数据的快速访问,但可能需要在扩展大小时重新分配整个数组空间。
    • 链表:链表的内存分布是分散的,每个节点除了存储数据外,还需要额外的空间存储指向下一个节点的指针(或者在双向链表中,还有指向前一个节点的指针)。这会增加额外的内存开销。

3. 数组与元组有什么区别

在Python中,数组(通常指列表)和元组是两种基本的数据结构,它们都可以用来存储一系列的元素。它们的主要区别在于可变性、用途和性能方面:

  1. 可变性(Mutability)

    • 列表(List):列表是可变的,意味着你可以在创建后添加、删除或更改其元素。
    • 元组(Tuple):元组是不可变的,一旦创建,你不能修改其内容。这包括不能添加、删除或更改存储在元组中的元素。
  2. 性能

    • 由于元组的不可变性,它们在某些情况下比列表具有更好的性能。例如,元组的创建速度通常比列表快,它们还可以作为字典中的键使用,而列表则不能,因为字典的键必须是不可变类型。
  3. 用途

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值