当前位置: 首页 > news >正文

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]

 

相关文章:

Python常见面试题的详解7

1. 内置的数据结构有哪几种 Python 中有多种内置的数据结构&#xff0c;主要分为以下几种&#xff1a; 1.1 数值类型 整数&#xff08;int&#xff09;&#xff1a;用于表示整数&#xff0c;没有大小限制。例如&#xff1a;1, -5, 100。浮点数&#xff08;float&#xff09;…...

Django REST Framework (DRF) 中用于构建 API 视图类解析

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

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版本。 根据你打包的目标平台&#xff0c;安装过程中选择必要模块。如果打包Android或iOS&#xff0c;直接选择相应模块即可。如果你想打包…...

读书笔记 - 修改代码的艺术

读书笔记 - 修改代码的艺术 第 1 章 修改软件第 2 章 带着反馈工作系统变更方式反馈方式遗留代码修改方法 第 3 章 感知和分离伪协作程序模拟对象 第 4 章 接缝模型接缝 第 5 章 工具自动化重构工具单元测试用具 第 6 章 时间紧迫&#xff0c;但必须修改新生方法&#xff08;Sp…...

【Go并发编程】Goroutine 调度器揭秘:从 GMP 模型到 Work Stealing 算法

每天一篇Go语言干货&#xff0c;从核心到百万并发实战&#xff0c;快来关注魔法小匠&#xff0c;一起探索Go语言的无限可能&#xff01; 在 Go 语言中&#xff0c;Goroutine 是一种轻量级的并发执行单元&#xff0c;它使得并发编程变得简单高效。而 Goroutine 的高效调度机制是…...

c# -01新属性-模式匹配、弃元、析构元组和其他类型

文章目录 **学习摘抄分享**模式匹配概述Null 检查类型测试比较离散值关系模型多个输入ObServation列表模式弃元元组和对象析构利用switch的模式进行匹配对于out的方法调用独立弃元析构元组和其他类型元组方法一方法二方法三方法四使用弃元元组的元素使用弃元的用户定义类型解构…...

同步异步日志系统-日志落地模块的实现

功能&#xff1a;将格式化完成后的日志消息字符串&#xff0c;输出到指定的位置 扩展&#xff1a;支持同时将日志落地到不同的位置 位置分类&#xff1a; 1.标准输出 2.指定文件&#xff08;时候进行日志分析&#xff09; 3.滚动文件&#xff08;文件按照时间/大小进行滚动…...

LabVIEW 天然气水合物电声联合探测

天然气水合物被认为是潜在的清洁能源&#xff0c;其储量丰富&#xff0c;预计将在未来能源格局中扮演重要角色。由于其独特的物理化学特性&#xff0c;天然气水合物的探测面临诸多挑战&#xff0c;涉及温度、压力、电学信号、声学信号等多个参数。传统的人工操作方式不仅效率低…...

类型通配符上限

主函数 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音视频同步

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

Mongodb数据管理

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

Django 创建表 choices的妙用:get_<field_name>_display()

1.定义choices 我在创建表时&#xff0c;对于性别这个字段&#xff0c;定义了choices 选项&#xff0c;1代表男&#xff0c;2代表女 mysql中表的数据如下&#xff0c;里面存储的是1或2 如果我们在网页上展示的时候&#xff0c;想展示“男”或“女”&#xff0c;而不是数字1或2…...

Spring Boot 集成 Kettle

Kettle 简介 Kettle 最初由 Matt Casters 开发&#xff0c;是 Pentaho 数据集成平台的一部分。它提供了一个用户友好的界面和丰富的功能集&#xff0c;使用户能够轻松地设计、执行和监控 ETL 任务。Kettle 通过其强大的功能和灵活性&#xff0c;帮助企业高效地处理大规模数据集…...

自学Java-面向对象高级(final、单例类、枚举类、抽象类、接口)

自学Java-面向对象高级&#xff08;final、单例类、枚举类、抽象类、接口&#xff09; 一、final关键字1、认识final关键字2、final修饰变量的注意3、常量 二、单例类&#xff08;设计模式&#xff09;1、设计模式的概念2、单例设计模式3、单例类有很多形式4、懒汉式单例类5、小…...

Hutool - Cache:简单而强大的缓存实现

目录 1. 缓存简介 2. 引入依赖 3. 常见缓存类型及使用示例 3.1 FIFO 缓存&#xff08;先进先出缓存&#xff09; 3.2 LRU 缓存&#xff08;最近最少使用缓存&#xff09; 3.3 定时缓存 4. 缓存的基本操作 5. 总结 1. 缓存简介 在软件开发中&#xff0c;缓存是一种常用的…...

DeepSeek 通过 API 对接第三方客户端 告别“服务器繁忙”

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 上一期分享了如何在本地部署 DeepSeek R1 模型&#xff0c;但通过命令行运行的本地模型&#xff0c;问答的交互也要使用命令行&#xff0c;体验并不是很好。这期分享几个第三方客户端&#xff0c;涵盖了桌…...

Python 基础-循环

目录 简介 break continue 小结 简介 要计算123&#xff0c;我们可以直接写表达式&#xff1a; >>> 1 2 3 6要计算123...10&#xff0c;勉强也能写出来。 但是&#xff0c;要计算123...10000&#xff0c;直接写表达式就不可能了。 为了让计算机能计算成千上…...

Java和SQL测试、性能监控中常用工具

下面我会详细列举一些在Java和SQL测试、调试、性能监控中常用的工具&#xff0c;并结合项目中提到的各个技术点说明如何选择合适的工具和方法。 一、Java项目常用的测试、调试与性能监控工具 单元测试与集成测试&#xff1a;JUnit/TestNG&#xff1a; 用于编写单元测试和集成测…...

SQL 注入攻击详解[基础篇]:Web 应用程序安全漏洞与防御策略

目录 SQL注入的简介 现代 Web 应用程序中的数据库交互与 SQL 注入攻击 数据库管理系统&#xff08;DBMS&#xff09;架构与 SQL 注入 什么是 SQL 注入&#xff1f; SQL 注入的工作原理 SQL 注入的用例与影响 如何预防 SQL 注入&#xff1f; 数据库分类 数据库类型&am…...

【ArcGIS Pro二次开发】(87):样式_Style的用法

.Stylx类型的文件即为样式库文件&#xff0c;保存了符号样式。 1、根据名字获取当前工程中的style //获取当前工程中的所有style var ProjectStyles Project.Current.GetItems<StyleProjectItem>();//根据名字找出指定的style StyleProjectItem style ProjectStyles.F…...

从无人机到卫星:实战中如何搞定大气校正?以ENVI/FLAASH工具为例

从无人机到卫星&#xff1a;实战中如何搞定大气校正&#xff1f;以ENVI/FLAASH工具为例 当你在清晨处理一幅刚接收的Sentinel-2影像时&#xff0c;是否曾被那层"蓝色薄雾"困扰&#xff1f;这种因大气散射导致的色彩失真&#xff0c;正是遥感数据分析中的头号难题。大…...

第四章:TTM分析: 4.1 TTM设计目标和核心概念

身边的朋友都说TTM复杂。 TTM 之所以复杂&#xff0c;根源在于它需要应对和解决多样化的显存管理需求。只有深入理解这些需求&#xff0c;才能真正把握 TTM 的设计思路和实现细节&#xff0c;从而理解其复杂性。 1. 核心设计目标&#xff08;解决的根本需求&#xff09; TTM…...

基于Next.js与WooCommerce构建高性能无头电商前端实战指南

1. 项目概述&#xff1a;为什么选择 Next.js 与 WooCommerce 的组合&#xff1f; 如果你正在寻找一个现代化的、高性能的电商网站解决方案&#xff0c;并且对 WordPress 的生态和 WooCommerce 的灵活性情有独钟&#xff0c;那么 w3bdesign/nextjs-woocommerce 这个项目绝对值…...

PMOS管在关闭状态下Vgs和Vds过压损坏分析

PMOS通常用在高端开关、源极接电源、栅极驱动电压相对源极为负&#xff0c;且工作在关闭状态下电压应力最大&#xff0c;容易导致Vgs过压&#xff08;栅源击穿&#xff09;、Vds&#xff08;漏源击穿&#xff09;。以下分别分析两者被击穿的原因&#xff1a; 核心状态&#xff…...

笔记_2026.4.28_004

&#x1f4d8; 笔记一&#xff1a;在 VS2022 中开发 Qt 程序 – 为什么需要 windeployqt 以及如何自动化一、问题现象在 Visual Studio 2022 中成功生成 Qt 程序&#xff08;例如 Flex.exe&#xff09;后&#xff1a;在 VS 中点击“本地 Windows 调试器”运行&#xff0c;程序无…...

分享一些学习C语言常见的代码

分享一些学习C语言常见的代码 下面是我在学习C语言中用来熟悉写代码的一些程序代码&#xff0c;希望对正在学习C语言的小伙伴有用&#xff01; 1按要求输入输出数据 #include <stdio.h> int main() { int a,b;char c1,c2;float x,y,z;scanf("%5d%5d%c%c%f%f%*f,%f&q…...

AI技术开发少儿英语APP

开发一个少儿英语APP&#xff0c;在2026年意味着要将原生多模态能力与成体系的教学逻辑深度融合。相比成人应用&#xff0c;少儿产品的核心在于“趣味性”、“安全护栏”以及“极低的交互门槛”。 以下是开发一款少儿英语APP的核心技术方案与产品逻辑&#xff1a; 1. 核心技术…...

GPU显存故障检测:memtest_vulkan让显卡健康状态一目了然

GPU显存故障检测&#xff1a;memtest_vulkan让显卡健康状态一目了然 【免费下载链接】memtest_vulkan Vulkan compute tool for testing video memory stability 项目地址: https://gitcode.com/gh_mirrors/me/memtest_vulkan 当你的游戏画面突然闪烁、3D渲染意外崩溃&a…...

告别C盘爆满!手把手教你自定义Rust安装目录到D盘(附MinGW配置避坑指南)

彻底解放C盘空间&#xff1a;Rust开发环境全链路迁移指南与MinGW深度调优 当你在Windows上安装Rust时&#xff0c;是否注意到.rustup和.cargo目录正悄无声息地吞噬着宝贵的C盘空间&#xff1f;对于128GB SSD系统盘的用户而言&#xff0c;这简直是场灾难。更糟的是&#xff0c;…...

RTranslator终极指南:开源Android离线实时翻译应用完全教程

RTranslator终极指南&#xff1a;开源Android离线实时翻译应用完全教程 【免费下载链接】RTranslator Open source real-time translation app for Android that runs locally 项目地址: https://gitcode.com/GitHub_Trending/rt/RTranslator RTranslator是一款开源的An…...