Python常见面试题的详解7

1. 内置的数据结构有哪几种

Python 中有多种内置的数据结构,主要分为以下几种:

1.1 数值类型
  • 整数(int):用于表示整数,没有大小限制。例如:1, -5, 100
  • 浮点数(float):用于表示小数。例如:3.14, -0.5
  • 复数(complex):由实部和虚部组成,虚部以 jJ 结尾。例如:3 + 4j
1.2 序列类型
  • 字符串(str):由零个或多个字符组成的不可变序列。例如:"hello"
  • 列表(list):一种可变的序列类型,可以包含不同类型的元素。例如:[1, 'a', True]
  • 元组(tuple):一种不可变的序列类型,使用圆括号表示。例如:(1, 2, 3)
1.3 集合类型
  • 集合(set):无序且唯一元素的集合,可变类型。例如:{1, 2, 3}
  • 冻结集合(frozenset):不可变的集合类型。例如:frozenset([1, 2, 3])
1.4 映射类型
  • 字典(dict):以键值对形式存储数据,键是唯一的,可变类型。例如:{'name': 'Alice', 'age': 25}
  • 要点:

不同的数据结构在内存占用和性能表现上有所差异。例如,列表在插入和删除元素时效率相对较低,尤其是在列表头部操作;而集合在查找元素时具有较高的效率,时间复杂度为 O (1)。在实际应用中,需要根据具体的需求选择合适的数据结构。比如,当需要存储有序且可重复的数据时,列表是不错的选择;当需要快速判断元素是否存在时,集合更为合适。

2. 如何实现单例模式?请写出三种实现方式

2.1 使用模块

Python 的模块在第一次导入时会被执行,并且会将模块的内容加载到内存中,后续的导入操作都会使用同一个模块对象,因此可以利用这一特性实现单例模式。

python

# singleton.py
class Singleton:def __init__(self):passsingleton_instance = Singleton()

在其他文件中使用:

python

from singleton import singleton_instance
2.2 使用装饰器

python

def singleton(cls):instances = {}def get_instance(*args, **kwargs):if cls not in instances:instances[cls] = cls(*args, **kwargs)return instances[cls]return get_instance@singleton
class MyClass:def __init__(self):passobj1 = MyClass()
obj2 = MyClass()
print(obj1 is obj2)  # 输出: True
2.3 使用类方法

python

class Singleton:_instance = None@classmethoddef get_instance(cls):if cls._instance is None:cls._instance = cls()return cls._instanceobj1 = Singleton.get_instance()
obj2 = Singleton.get_instance()
print(obj1 is obj2)  # 输出: True
  • 要点

单例模式在实际开发中有很多应用场景,比如数据库连接池、日志记录器等。在多线程环境下使用单例模式时,需要考虑线程安全问题。例如,使用类方法实现单例模式时,在多线程环境下可能会创建多个实例,需要使用锁机制来保证线程安全。

  • 示例

python

import threadingclass Singleton:_instance = None_lock = threading.Lock()@classmethoddef get_instance(cls):with cls._lock:if cls._instance is None:cls._instance = cls()return cls._instance

 

3. 如何反转一个整数

例如 -168 --> -861

python

def reverse_integer(x):sign = -1 if x < 0 else 1num_str = str(abs(x))reversed_str = num_str[::-1]return sign * int(reversed_str)print(reverse_integer(-168))  # 输出: -861
  •  要点:

实现整数反转的关键步骤是先处理符号,然后将绝对值转换为字符串进行反转,最后再加上符号。在处理整数反转时,需要考虑整数溢出的问题。虽然 Python 的整数类型没有大小限制,但在某些需要与其他语言交互或对性能有严格要求的场景下,可能需要考虑溢出问题。另外,可以对输入进行合法性检查,确保输入是有效的整数。

4. 用一行代码写出 1 + 2 + 3 + ... + 10000

python

print(sum(range(1, 10001)))
  • 要点: 

使用 sum 函数和 range 函数可以在一行代码中完成 1 到 10000 的求和。同样,对于较大的范围,使用数学公式 n * (n + 1) // 2 可以更高效地计算。另外,可以将这个功能封装成一个函数,方便计算任意范围的整数求和。以下是示例代码:

  • 示例

python

def sum_range(n):return n * (n + 1) // 2print(sum_range(10000))

 

5. 遍历列表时删除元素的正确做法

5.1 使用列表推导式创建新列表

python

original_list = [1, 2, 3, 4, 5]
new_list = [i for i in original_list if i != 3]
print(new_list)
5.2 反向遍历列表并删除元素

python

original_list = [1, 2, 3, 4, 5]
for i in range(len(original_list) - 1, -1, -1):if original_list[i] == 3:del original_list[i]
print(original_list)
  •  要点: 

正确的做法有使用列表推导式创建新列表和反向遍历列表并删除元素。列表推导式的优点是代码简洁,易于理解,但会创建一个新的列表,占用额外的内存。反向遍历列表的方法不会创建新的列表,但代码相对复杂一些。在处理大型列表时,需要根据具体情况选择合适的方法。另外,还可以使用迭代器和 filter 函数来实现相同的功能。

 

6. 可变类型和不可变类型

  • 可变类型:对象创建后,其值可以被修改的类型。常见的可变类型有列表(list)、集合(set)、字典(dict)。

python

my_list = [1, 2, 3]
my_list.append(4)
print(my_list)  # 输出: [1, 2, 3, 4]
  • 不可变类型:对象创建后,其值不能被修改的类型。常见的不可变类型有整数(int)、浮点数(float)、字符串(str)、元组(tuple)。

python

my_str = "hello"
# 下面这行代码会报错,因为字符串是不可变的
# my_str[0] = 'H'
  •  要点: 

可变类型和不可变类型在函数参数传递时表现不同。不可变类型作为参数传递时,函数内部对参数的修改不会影响到外部的变量;而可变类型作为参数传递时,函数内部对参数的修改会影响到外部的变量。

  • 示例

python

def modify_immutable(num):num = num + 1return numdef modify_mutable(lst):lst.append(4)return lsta = 1
b = [1, 2, 3]
print(modify_immutable(a))  # 输出: 2
print(a)  # 输出: 1
print(modify_mutable(b))  # 输出: [1, 2, 3, 4]
print(b)  # 输出: [1, 2, 3, 4]

 

7. is== 有什么区别

  • == 用于比较两个对象的值是否相等。

python

a = [1, 2, 3]
b = [1, 2, 3]
print(a == b)  # 输出: True
  • is 用于比较两个对象是否是同一个对象,即它们是否指向同一块内存地址。

python

a = [1, 2, 3]
b = [1, 2, 3]
print(a is b)  # 输出: Falsec = a
print(a is c)  # 输出: True
  •   要点: 

在实际应用中,对于简单的数据类型,如整数、字符串等,Python 会对一些常用的值进行缓存,因此在一定范围内使用 is 比较可能会得到意外的结果。

  • 示例

python

a = 100
b = 100
print(a is b)  # 输出: Truea = 1000
b = 1000
print(a is b)  # 输出: False

 

 8. 求出列表所有奇数并构造新列表

python

original_list = [1, 2, 3, 4, 5]
odd_list = [i for i in original_list if i % 2 != 0]
print(odd_list)  # 输出: [1, 3, 5]
  •   要点: 

可以使用列表推导式来筛选出列表中的奇数元素并构建新列表。除了列表推导式,还可以使用 filter 函数和 lambda 表达式来实现相同的功能。

  • 示例

python

original_list = [1, 2, 3, 4, 5]
odd_list = list(filter(lambda x: x % 2 != 0, original_list))
print(odd_list)  # 输出: [1, 3, 5]

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么叫以太网?它与因特网有何区别?

以太网和互联网的定义与区别 以太网&#xff08;Ethernet&#xff09;和互联网&#xff08;Internet&#xff09;是两个不同的概念&#xff0c;虽然它们密切相关&#xff0c;但它们的作用和定义是不同的。 以太网&#xff08;Ethernet&#xff09; 以太网是一个 局域网&…

教育小程序+AI出题:如何通过自然语言处理技术提升题目质量

随着教育科技的飞速发展&#xff0c;教育小程序已经成为学生与教师之间互动的重要平台之一。与此同时&#xff0c;人工智能&#xff08;AI&#xff09;和自然语言处理&#xff08;NLP&#xff09;技术的应用正在不断推动教育内容的智能化。特别是在AI出题系统中&#xff0c;如何…

VScode内接入deepseek包过程(本地部署版包会)

目录 1. 首先得有vscode软件 2. 在我们的电脑本地已经部署了ollama&#xff0c;我将以qwen作为实验例子 3. 在vscode上的扩展商店下载continue 4. 下载完成后&#xff0c;依次点击添加模型 5. 在这里可以添加&#xff0c;各种各样的模型&#xff0c;选择我们的ollama 6. 选…

docker安装mysql:8.0

1.docker源 目前docker国内的源基本上用不了了&#xff0c;建议去淘宝找一找&#xff0c;我整了一个大概是10R一个月。 2.拉取镜像 docker pull mysql:8.0 3.启动容器 命令如下&#xff1a; docker run \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD123456 \-v /home/data/mysq…

作用域链精讲

作用域链精讲 1编译阶段1.1分词1.2解析(解析为抽象语法树AST)1.3代码生成 2执行阶段3查询阶段4嵌套机制(这个比较重要)----就近原则5异常5.1计算机为啥要区分LHS和RHS5.2RHS查询5.3LHS查询 6什么是词法作用域7遮蔽效应8变量和函数的声明提升&#xff08;也是预解析&#xff09;…

4.【线性代数】——矩阵的LU分解

四 矩阵的LU分解 1. AB的逆矩阵2. 转置矩阵3. ALU3.1 2x2矩阵3.2 3x3矩阵3.3 nxn的矩阵分解的次数&#xff1f; 1. AB的逆矩阵 { ( A B ) ( B − 1 A − 1 ) I ( B − 1 A − 1 ) ( A B ) I ⇒ ( A B ) − 1 B − 1 A − 1 \begin{cases} (AB)(B^{-1}A^{-1}) I\\ (B^{-1}A^…

Arduino-ESP8266 GPIO(中断或轮询)

检测GPIO高低电平 1. 中断 2. 轮询 gpio.ino // GPIO按键输入 // 监听高电平接线图 // ESP8266 NodeMCU // ┌───────────┐ // │ D1(GPIO5) │──────┤按键一端 // │ │ │ // │ 3V3 │──────┤按键另一端 // └───…

FPGA简介|结构、组成和应用

Field Programmable Gate Arrays&#xff08;FPGA&#xff0c;现场可编程逻辑门阵列&#xff09;&#xff0c;是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物&#xff0c; 是作为专用集成电路&#xff08;ASIC&#xff09;领域中的一种半定制电路而出现的&#xff0c…

iOS 获取设备占用内存

获取应用占用内存 获取应用进程占用内存 - (NSUInteger)memoryUsage {task_vm_info_data_t vmInfo;mach_msg_type_number_t count TASK_VM_INFO_COUNT;kern_return_t result task_info(mach_task_self(), TASK_VM_INFO, (task_info_t)&vmInfo, &count);if (result …

WPF的MVVMLight框架

在NuGet中引入该库&#xff1a; MVVMLight框架中的命令模式的使用&#xff1a; <StackPanel><TextBox Text"{Binding Name}"/><TextBox Text"{Binding Title}"/><Button Content"点我" Command"{Binding ShowCommand…

如何使用OPENAI的Whisper功能进行音频字母提取功能

首先你可以使用 Python 中的 requests 库来下载该音频文件&#xff0c;然后通过 open() 打开该文件并传递给 OpenAI Whisper API。 完整代码如下&#xff1a; 安装需要的库&#xff1a; pip install openai requests Python 代码&#xff1a; OPENAI_API_KEY "your o…

地平线征程6全球首发上车比亚迪,开启大规模量产交付

2月10日&#xff0c;比亚迪举办智能化战略发布会&#xff0c;对外正式公布全民智驾战略&#xff0c;并发布全新天神之眼高阶智驾系统。未来&#xff0c;比亚迪全系车型将搭载天神之眼高阶智驾系统。 值得注意的是&#xff0c;地平线最新一代车载智能计算方案征程6系列全球首发…

深度学习04 数据增强、调整学习率

目录 数据增强 常用的数据增强方法 调整学习率 学习率 调整学习率 ​调整学习率的方法 有序调整 等间隔调整 多间隔调整 指数衰减 余弦退火 ​自适应调整 自定义调整 数据增强 数据增强是通过对训练数据进行各种变换&#xff08;如旋转、翻转、裁剪等&#xff09;&am…

常用查找算法整理(顺序查找、二分查找、插值查找、斐波那契查找、哈希查找、二叉排序树查找、平衡二叉树查找、红黑树查找、B树和B+树查找、分块查找)

常用的查找算法&#xff1a; 顺序查找&#xff1a;最简单的查找算法&#xff0c;适用于无序或数据量小的情况&#xff0c;逐个元素比较查找目标值。二分查找&#xff1a;要求数据有序&#xff0c;通过不断比较中间元素与目标值&#xff0c;将查找范围缩小一半&#xff0c;效率…

Lineageos 22.1(Android 15) 编译隐藏API的 android.jar

一、前言 有时候会我们开发系统应用需要一些系统的方法或者属性之类的,但是被隐藏导致无法正常显示,因为SDK提供的android.jar被隐藏了,所以只能看到sourcecode,实际上编译是会报错的,比如: 一般这种无法是两种,直接添加一个类,同包名同类名,或者依赖framework.jar,可以骗过…

Game Maker 0.11:《The Sandbox》创作愿景的全新篇章

开放元宇宙已经到来&#xff0c;用户生成内容&#xff08;UGC&#xff09;是其核心。在《The Sandbox》中&#xff0c;我们正在重新定义数字创作&#xff0c;给予新一代创作者工具&#xff0c;打造沉浸式、互动式的游戏和体验&#xff0c;超越传统的短格式内容。在过去的12个月…

(8/100)每日小游戏平台系列

项目地址位于&#xff1a;小游戏导航 新增一个打地鼠游戏&#xff01; 打地鼠&#xff08;Whack-a-Mole&#xff09;是一款经典的休闲游戏&#xff0c;玩家需要点击随机出现的地鼠&#xff0c;以获取分数。游戏时间有限&#xff0c;玩家需要在规定时间内尽可能多地击中地鼠&am…

【动态规划篇】:动态规划中的“双线叙述”--如何用状态转移解决双序列难题

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;动态规划篇–CSDN博客 文章目录 一.双序列类DP解题步骤 二.例题1.最长公共子序列2.不相交的…

观察者模式说明(C语言版本)

观察者模式主要是为了实现一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使它们能够自动更新自己。下面使用C语言实现了一个具体的应用示例&#xff0c;有需要的可以参考…

yolo11s rknn无法detect的bugfix - step by step

1.缘起 上周四下班时&#xff0c;发现在宿主机环境工作良好的既有的pytorch模型&#xff0c;在通过.pt->.onnx->.rknn的转换后无法正常工作。周五下班时&#xff0c;怀疑疑点在两处&#xff1a; 版本匹配问题通道和参数传递问题。 周六&#xff0c;周日&#xff0c;周…