Python常见面试题的详解7
1. 内置的数据结构有哪几种
Python 中有多种内置的数据结构,主要分为以下几种:
1.1 数值类型
- 整数(int):用于表示整数,没有大小限制。例如:
1
,-5
,100
。 - 浮点数(float):用于表示小数。例如:
3.14
,-0.5
。 - 复数(complex):由实部和虚部组成,虚部以
j
或J
结尾。例如: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]
相关文章:
Python常见面试题的详解7
1. 内置的数据结构有哪几种 Python 中有多种内置的数据结构,主要分为以下几种: 1.1 数值类型 整数(int):用于表示整数,没有大小限制。例如:1, -5, 100。浮点数(float)…...

Django REST Framework (DRF) 中用于构建 API 视图类解析
Django REST Framework (DRF) 提供了丰富的视图类,用于构建 API 视图。这些视图类可以分为以下几类: 1. 基础视图类 这些是 DRF 中最基础的视图类,通常用于实现自定义逻辑。 常用类 APIView: 最基本的视图类,所有其…...

Huatuo热更新--安装HybridCLR
1.自行安装unity编辑器 支持2019.4.x、2020.3.x、2021.3.x、2022.3.x 中任一版本。推荐安装2019.4.40、2020.3.26、2021.3.x、2022.3.x版本。 根据你打包的目标平台,安装过程中选择必要模块。如果打包Android或iOS,直接选择相应模块即可。如果你想打包…...
读书笔记 - 修改代码的艺术
读书笔记 - 修改代码的艺术 第 1 章 修改软件第 2 章 带着反馈工作系统变更方式反馈方式遗留代码修改方法 第 3 章 感知和分离伪协作程序模拟对象 第 4 章 接缝模型接缝 第 5 章 工具自动化重构工具单元测试用具 第 6 章 时间紧迫,但必须修改新生方法(Sp…...

【Go并发编程】Goroutine 调度器揭秘:从 GMP 模型到 Work Stealing 算法
每天一篇Go语言干货,从核心到百万并发实战,快来关注魔法小匠,一起探索Go语言的无限可能! 在 Go 语言中,Goroutine 是一种轻量级的并发执行单元,它使得并发编程变得简单高效。而 Goroutine 的高效调度机制是…...
c# -01新属性-模式匹配、弃元、析构元组和其他类型
文章目录 **学习摘抄分享**模式匹配概述Null 检查类型测试比较离散值关系模型多个输入ObServation列表模式弃元元组和对象析构利用switch的模式进行匹配对于out的方法调用独立弃元析构元组和其他类型元组方法一方法二方法三方法四使用弃元元组的元素使用弃元的用户定义类型解构…...
同步异步日志系统-日志落地模块的实现
功能:将格式化完成后的日志消息字符串,输出到指定的位置 扩展:支持同时将日志落地到不同的位置 位置分类: 1.标准输出 2.指定文件(时候进行日志分析) 3.滚动文件(文件按照时间/大小进行滚动…...

LabVIEW 天然气水合物电声联合探测
天然气水合物被认为是潜在的清洁能源,其储量丰富,预计将在未来能源格局中扮演重要角色。由于其独特的物理化学特性,天然气水合物的探测面临诸多挑战,涉及温度、压力、电学信号、声学信号等多个参数。传统的人工操作方式不仅效率低…...
类型通配符上限
主函数 package typeWildcardTop;import java.util.ArrayList;public class typeWildcardTopTest {/**/public static void main(String[] args) { // test1();test2();}/*测试showList接收ArrayList类型 ArrayList接收各种类型参数创建animals cats mincats集合 传入s…...

嵌入式音视频开发(二)ffmpeg音视频同步
系列文章目录 嵌入式音视频开发(零)移植ffmpeg及推流测试 嵌入式音视频开发(一)ffmpeg框架及内核解析 嵌入式音视频开发(二)ffmpeg音视频同步 嵌入式音视频开发(三)直播协议及编码器…...

Mongodb数据管理
Mongodb数据管理 1.登录数据库,查看默认的库 [rootdb51~]# mongo> show databases; admin 0.000GB config 0.000GB local 0.000GB> use admin switched to db admin > show tables system.version > admin库:admin 是 MongoDB 的管理…...

Django 创建表 choices的妙用:get_<field_name>_display()
1.定义choices 我在创建表时,对于性别这个字段,定义了choices 选项,1代表男,2代表女 mysql中表的数据如下,里面存储的是1或2 如果我们在网页上展示的时候,想展示“男”或“女”,而不是数字1或2…...
Spring Boot 集成 Kettle
Kettle 简介 Kettle 最初由 Matt Casters 开发,是 Pentaho 数据集成平台的一部分。它提供了一个用户友好的界面和丰富的功能集,使用户能够轻松地设计、执行和监控 ETL 任务。Kettle 通过其强大的功能和灵活性,帮助企业高效地处理大规模数据集…...

自学Java-面向对象高级(final、单例类、枚举类、抽象类、接口)
自学Java-面向对象高级(final、单例类、枚举类、抽象类、接口) 一、final关键字1、认识final关键字2、final修饰变量的注意3、常量 二、单例类(设计模式)1、设计模式的概念2、单例设计模式3、单例类有很多形式4、懒汉式单例类5、小…...
Hutool - Cache:简单而强大的缓存实现
目录 1. 缓存简介 2. 引入依赖 3. 常见缓存类型及使用示例 3.1 FIFO 缓存(先进先出缓存) 3.2 LRU 缓存(最近最少使用缓存) 3.3 定时缓存 4. 缓存的基本操作 5. 总结 1. 缓存简介 在软件开发中,缓存是一种常用的…...

DeepSeek 通过 API 对接第三方客户端 告别“服务器繁忙”
本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 上一期分享了如何在本地部署 DeepSeek R1 模型,但通过命令行运行的本地模型,问答的交互也要使用命令行,体验并不是很好。这期分享几个第三方客户端,涵盖了桌…...
Python 基础-循环
目录 简介 break continue 小结 简介 要计算123,我们可以直接写表达式: >>> 1 2 3 6要计算123...10,勉强也能写出来。 但是,要计算123...10000,直接写表达式就不可能了。 为了让计算机能计算成千上…...
Java和SQL测试、性能监控中常用工具
下面我会详细列举一些在Java和SQL测试、调试、性能监控中常用的工具,并结合项目中提到的各个技术点说明如何选择合适的工具和方法。 一、Java项目常用的测试、调试与性能监控工具 单元测试与集成测试:JUnit/TestNG: 用于编写单元测试和集成测…...

SQL 注入攻击详解[基础篇]:Web 应用程序安全漏洞与防御策略
目录 SQL注入的简介 现代 Web 应用程序中的数据库交互与 SQL 注入攻击 数据库管理系统(DBMS)架构与 SQL 注入 什么是 SQL 注入? SQL 注入的工作原理 SQL 注入的用例与影响 如何预防 SQL 注入? 数据库分类 数据库类型&am…...
【ArcGIS Pro二次开发】(87):样式_Style的用法
.Stylx类型的文件即为样式库文件,保存了符号样式。 1、根据名字获取当前工程中的style //获取当前工程中的所有style var ProjectStyles Project.Current.GetItems<StyleProjectItem>();//根据名字找出指定的style StyleProjectItem style ProjectStyles.F…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...

Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...