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

Python常见面试题的详解8

1. 变量作用域和查找规则(LEGB)

  • 作用域层级
  1. Local:函数内部作用域

  2. Enclosing:闭包函数外层作用域

  3. Global:模块全局作用域

  4. Built-in:内置命名空间

  • 查找顺序:L → E → G → B
  • 关键特性

  global声明修改全局变量

  nonlocal修改闭包外层变量

      函数参数属于局部作用域

python

x = 'global'
def outer():x = 'outer'def inner():nonlocal x  # 修改闭包变量x = 'inner'inner()print(x)  # 输出 'inner'
  •  要点

Python 中有四种作用域:局部作用域(Local,L)、闭包函数外的函数中作用域(Enclosing,E)、全局作用域(Global,G)、内置作用域(Built - in,B)。变量查找顺序遵循 LEGB 规则,即先在局部作用域查找,若未找到则到闭包函数外的函数中作用域查找,接着是全局作用域,最后是内置作用域。在嵌套函数中,内层函数可以访问外层函数的变量,但默认情况下不能修改。如果需要修改,可以使用 nonlocal 关键字。在模块中定义的变量属于全局作用域,但在函数内部如果使用 global 关键字,可以修改全局变量的值。

  • 示例

python

def outer():x = 10def inner():nonlocal xx = 20inner()print(x)  # 输出 20outer()

2. 用三种方式将字符串 "789" 转换成 789 ,不使用内置 api,例如 int() 

python

# 方法1:ASCII码计算
def str_to_int(s):num = 0for c in s:num = num*10 + (ord(c) - ord('0'))return num# 方法2:逐位乘累加
def str_to_int(s):return sum((ord(c)-48)*10**i for i,c in enumerate(reversed(s)))# 方法3:递归实现
def str_to_int(s, acc=0):return acc if not s else str_to_int(s[1:], acc*10 + (ord(s[0])-48))
  •  要点

可以使用 ASCII 码和乘法,加法运算,通过循环和位运算,使用递归这些方法可以实现对字符串和整数之间转换。在一些对性能要求较高且不允许使用内置函数的场景下,这些手动实现的转换方法会更有优势。

  • 示例

python

# 方法一:利用 ASCII 码和乘法、加法运算
def str_to_int_1(s):result = 0for char in s:result = result * 10 + (ord(char) - ord('0'))return result# 方法二:通过循环和位运算
def str_to_int_2(s):num = 0for i in range(len(s)):digit = ord(s[i]) - ord('0')num = (num << 3) + (num << 1) + digitreturn num# 方法三:使用递归
def str_to_int_3(s):if len(s) == 0:return 0return str_to_int_3(s[:-1]) * 10 + (ord(s[-1]) - ord('0'))print(str_to_int_1("789"))
print(str_to_int_2("789"))
print(str_to_int_3("789"))

 

 3. 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

  •  要点
  1. 暴力枚举法,通过两层循环遍历数组,找到满足条件的两个数。
  2. 使用哈希表,遍历数组时,记录每个元素及其索引,同时检查目标值与当前元素的差值是否已在哈希表中。
  3. 在处理大规模数组时,哈希表的优势会更加明显。该问题还可以扩展到找出数组中三个数、四个数之和等于目标值的情况。
  • 示例

python

# 方法一:暴力枚举法
def twoSum_1(nums, target):for i in range(len(nums)):for j in range(i + 1, len(nums)):if nums[i] + nums[j] == target:return [i, j]# 方法二:使用哈希表
def twoSum_2(nums, target):num_dict = {}for i, num in enumerate(nums):complement = target - numif complement in num_dict:return [num_dict[complement], i]num_dict[num] = inums = [1, 2, 3, 4]
target = 3
print(twoSum_1(nums, target))
print(twoSum_2(nums, target))

 

4. 用三种方式统计一个文本中单词频次最高的 10 个单词

  • 要点
  1. 使用字典手动统计单词频次,然后对字典按值排序。
  2. 使用 collections.Counter 类,可以方便地统计元素的频次。
  3. 结合 defaultdictheapq 模块,利用堆排序找出前 10 个高频单词。
  4. 在处理大规模文本时,collections.Counter 是比较高效的选择,因为它的实现经过了优化。而使用 heapq 模块可以在不排序整个单词频次字典的情况下找出前 10 个高频单词,在内存使用上可能更有优势。

  • 示例

python

import collections
import heapqtext = "apple banana apple cherry banana apple"# 方法一:使用字典手动统计
word_count = {}
for word in text.split():if word in word_count:word_count[word] += 1else:word_count[word] = 1
sorted_words = sorted(word_count.items(), key=lambda item: item[1], reverse=True)[:10]
print(sorted_words)# 方法二:使用 collections.Counter
counter = collections.Counter(text.split())
print(counter.most_common(10))# 方法三:结合 defaultdict 和 heapq
from collections import defaultdict
word_freq = defaultdict(int)
for word in text.split():word_freq[word] += 1
heap = [(-freq, word) for word, freq in word_freq.items()]
heapq.heapify(heap)
top_10 = [heapq.heappop(heap) for _ in range(min(10, len(heap)))]
result = [(word, -freq) for freq, word in top_10]
print(result)

 

5. 请写出一个函数满足以下条件:该函数的输入是一个仅包含数字的 list,输出一个新的 list,其中每一个元素要满足以下条件:

  1. 该元素是奇数
  2. 该元素在原 list 中是在奇数的位置(index 是奇数)
  •  要点

使用列表推导式遍历原列表,筛选出满足条件的元素。可以定义一个函数应用于数据处理中,例如从一系列测量数据中筛选出特定位置的奇数测量值。对于不同的数据类型或更复杂的筛选条件,可以对该函数进行扩展。

  • 示例

python

def filter_list(lst):return [lst[i] for i in range(1, len(lst), 2) if lst[i] % 2 != 0]nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(filter_list(nums))

6. 使用单一的列表生成式来产生一个新的列表

  •  要点

列表生成式可以结合条件判断、循环等操作,以简洁的语法生成新列表。列表生成式不仅可以用于生成简单的数值列表,还可以用于处理嵌套列表、字符串列表等。在处理复杂的数据结构时,合理使用列表生成式可以使代码更加简洁易读。

  • 示例

生成一个包含 1 到 10 的平方的列表:

python

squares = [i ** 2 for i in range(1, 11)]
print(squares)

 

7. 用一行代码生成 [1,4,9,16,25,36,49,64,81,100]

python

squares = [x**2 for x in range(1,11)]  # [1,4,9,...,100]
  •  要点

使用列表生成式 [x ** 2 for x in range(1, 11)] 可以在一行代码中完成列表的生成。可以通过修改 range 的参数和表达式,生成不同规律的列表。例如,生成 2 到 20 的偶数的平方列表:[x ** 2 for x in range(2, 21, 2)]

 

8. 输入某年某月某日,判断这一天是这一年的第几天

  •  要点
  1. 先判断该年是否为闰年,闰年 2 月有 29 天,平年 2 月有 28 天。
  2. 然后累加每个月的天数,直到输入的月份,再加上输入的日期。
  3. 可以将该功能封装成一个函数,方便在不同的程序中调用。同时,可以添加输入验证,确保输入的日期是合法的。
  • 示例

python

def day_of_year(year, month, day):days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):days_in_month[1] = 29total_days = sum(days_in_month[:month - 1]) + dayreturn total_daysyear = 2024
month = 3
day = 15
print(day_of_year(year, month, day))

 

9. 两个有序列表l1l2,对这两个列表进行合并不可使用 extend 

  •  要点

使用双指针法,分别遍历两个列表,比较指针所指元素的大小,将较小的元素添加到新列表中,直到其中一个列表遍历完,然后将另一个列表剩余的元素依次添加到新列表中。在处理多个有序列表的合并时,可以使用归并排序的方法,将多个列表两两合并。

  • 示例

python

def merge_lists(l1, l2):merged = []i, j = 0, 0while i < len(l1) and j < len(l2):if l1[i] < l2[j]:merged.append(l1[i])i += 1else:merged.append(l2[j])j += 1while i < len(l1):merged.append(l1[i])i += 1while j < len(l2):merged.append(l2[j])j += 1return mergedl1 = [1, 3, 5]
l2 = [2, 4, 6]
print(merge_lists(l1, l2))

10. 给定一个任意长度数组,实现一个函数让所有奇数都在偶数前面,而且奇数升序排列,偶数降序排序,如字符串 '123456789',变成 '135798642'

  •  要点
  1. 先将数组中的奇数和偶数分别提取出来。
  2. 对奇数列表进行升序排序,对偶数列表进行降序排序。
  3. 最后将排序后的奇数列表和偶数列表合并。
  4. 可以定义一个函数应用于数据排序和整理的场景中,对于不同的数据类型(如整数列表、字符串列表等),可以进行相应的修改。
  • 示例

python

def sort_array(arr):odd_nums = [int(i) for i in arr if int(i) % 2 != 0]even_nums = [int(i) for i in arr if int(i) % 2 == 0]odd_nums.sort()even_nums.sort(reverse=True)result = [str(i) for i in odd_nums + even_nums]return ''.join(result)arr = '123456789'
print(sort_array(arr))

相关文章:

Python常见面试题的详解8

1. 变量作用域和查找规则&#xff08;LEGB&#xff09; 作用域层级&#xff1a; Local&#xff1a;函数内部作用域 Enclosing&#xff1a;闭包函数外层作用域 Global&#xff1a;模块全局作用域 Built-in&#xff1a;内置命名空间 查找顺序&#xff1a;L → E → G → B关…...

Deepseek R1模型本地化部署与API实战指南:释放企业级AI生产力

摘要 本文深入解析Deepseek R1开源大模型的本地化部署流程与API集成方案&#xff0c;涵盖从硬件选型、Docker环境搭建到模型微调及RESTful接口封装的完整企业级解决方案。通过电商评论分析和智能客服搭建等案例&#xff0c;展示如何将前沿AI技术转化为实际生产力。教程支持Lin…...

node.js + html调用ChatGPTApi实现Ai网站demo(带源码)

文章目录 前言一、demo演示二、node.js 使用步骤1.引入库2.引入包 前端HTML调用接口和UI所有文件总结 前言 关注博主&#xff0c;学习每天一个小demo 今天是Ai对话网站 又到了每天一个小demo的时候咯&#xff0c;前面我写了多人实时对话demo、和视频转换demo&#xff0c;今天…...

sql语言语法的学习

sql通用语法 sql分类 DDL(操作数据库和表) 操作数据库 操作表_查询 操作表_创建 举例&#xff1a; 操作表_删除 操作表_修改 DML(增删改表中数据) DML添加数据 DML删除数据 DML修改数据 DQL 单表查询 基础查询 条件查询 案例演示&#xff1a; 排序查询 聚合函数 分组查询…...

力扣 最长递增子序列

动态规划&#xff0c;二分查找。 题目 由题&#xff0c;从数组中找一个最长子序列&#xff0c;不难想到&#xff0c;当这个子序列递增子序列的数越接近时是越容易拉长的。从dp上看&#xff0c;当遍历到这个数&#xff0c;会从前面的dp选一个最大的数加上当前数&#xff0c;注意…...

【linux】在 Linux 服务器上部署 DeepSeek-r1:70b 并通过 Windows 远程可视化使用

【linux】在 Linux 服务器上部署 DeepSeek-r1:70b 并通过 Windows 远程可视化使用 【承接商业广告,如需商业合作请+v17740568442】 文章目录 【linux】在 Linux 服务器上部署 DeepSeek-r1:70b 并通过 Windows 远程可视化使用个人配置详情一、安装ollama二、下载deepseek版本…...

visutal studio 2022使用qcustomplot基础教程

编译 下载&#xff0c;2.1.1版支持到Qt6.4 。 拷贝qcustomplot.h和qcustomplot.cpp到项目源目录&#xff08;Qt project&#xff09;。 在msvc中将它俩加入项目中。 使用Qt6.8&#xff0c;需要修改两处代码&#xff1a; L6779 # if QT_VERSION > QT_VERSION_CHECK(5, 2, …...

Linux:线程概念、理解、控制

目录 一、认识线程 1.认识线程V1 2.认识线程V2 3.认识线程V3 4.认识线程V4 5.认识线程V5 二、线程控制 1.前言 2.创建线程 3.线程等待 4.线程终止 5.线程分离 三、线程理解 一、认识线程 1.认识线程V1 借用大多数计算机教材的话&#xff0c;线程是进程的一个执行…...

Postman如何流畅使用DeepSeek

上次写了一篇文章是用chatBox调用api的方式使用DeepSeek&#xff0c;但是实际只能请求少数几次就不再能给回响应。这回我干脆用最原生的方法Postman调用接口请求好了。 1. 通过下载安装Postman软件 postman下载(https://pan.quark.cn/s/c8d1c7d526f3)&#xff0c;包含7.0和10…...

K8S下载离线安装包所需文件

下载相关文件 官网下载地址集合https://kubernetes.io/zh-cn/releases/download/ 下载相关镜像 官网镜像描述 所有 Kubernetes 容器镜像都被部署到 registry.k8s.io 容器镜像仓库。 容器镜像支持架构registry.k8s.io/kube-apiserver:v1.32.0amd64, arm, arm64, ppc64le, …...

探索Hugging Face:开源AI社区的核心工具与应用实践

引言&#xff1a;AI民主化的先锋 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;Hugging Face已成为开源社区的代名词。这个成立于2016年的平台&#xff0c;通过提供易用的工具和丰富的预训练模型库&#xff0c;彻底改变了开发者使用和部署AI模型的方式。截至202…...

【操作系统】深入理解Linux物理内存

物理内存的组织结构 我们平时所称的内存也叫随机访问存储器也叫 RAM 。RAM 分为两类&#xff1a; 一类是静态 RAM&#xff08; SRAM &#xff09;&#xff0c;这类 SRAM 用于 CPU 高速缓存 L1Cache&#xff0c;L2Cache&#xff0c;L3Cache。其特点是访问速度快&#xff0c;访…...

npm 私服使用介绍

一、导读 本文主要介绍 npm 私服的使用&#xff0c;至于 npm 私服搭建的过程&#xff0c;可以看本人之前的文章《Docker 部署 verdaccio 搭建 npm 私服》 二、前置条件 npm私服地址&#xff1a;http://xxx.xxx.xxx.xxx:port/ 三、本地 npm 源切换 使用nrm&#xff0c;可以方…...

安全筑基,智能赋能:BeeWorks IM引领企业协同新纪元

在数字经济高速发展的今天&#xff0c;企业通讯系统已从单纯的信息传递工具演变为支撑业务创新的核心平台。传统通讯工具在安全性、智能化、协同性等方面的不足&#xff0c;严重制约着企业的数字化转型进程。BeeWorks IM系统以其创新的技术架构和智能化功能&#xff0c;正在重新…...

水务+AI应用探索(一)| FastGPT+DeepSeek 本地部署

在当下的科技浪潮中&#xff0c;AI 无疑是最炙手可热的焦点之一&#xff0c;其强大的能力催生出了丰富多样的应用场景&#xff0c;广泛渗透到各个行业领域。对于水务行业而言&#xff0c;AI 的潜力同样不可估量。为了深入探究 AI 在水务领域的实际应用成效&#xff0c;切实掌握…...

[JVM篇]垃圾回收器

垃圾回收器 Serial Seral Old PartNew CMS(Concurrent Mark Sweep) Parallel Scavenge Parallel Old G1 ZGC...

SQL Server:查看当前连接数和最大连接数

目录标题 **1. 查看当前连接数****使用系统视图****使用动态管理视图** **2. 查看最大连接数****通过配置选项****通过服务器属性** **3. 查看连接数的实时变化****4. 设置最大连接数****5. 查看连接的详细信息****6. 使用 SQL Server Management Studio (SSMS)****7. 使用 SQL…...

DeepSeek应用——与PyCharm的配套使用

目录 一、配置方法 二、使用方法 三、注意事项 1、插件市场无continue插件 2、无结果返回&#xff0c;且在本地模型报错 记录自己学习应用DeepSeek的过程&#xff0c;使用的是自己电脑本地部署的私有化蒸馏模型...... &#xff08;举一反三&#xff0c;这个不单单是可以用…...

【第15章:量子深度学习与未来趋势—15.3 量子深度学习在图像处理、自然语言处理等领域的应用潜力分析】

一、开篇:为什么我们需要关注这场"量子+AI"的世纪联姻? 各位技术爱好者们,今天我们要聊的这个话题,可能是未来十年最值得押注的技术革命——量子深度学习。这不是简单的"1+1=2"的物理叠加,而是一场可能彻底改写AI发展轨迹的范式转移。 想象这样一个…...

多模态基础模型训练笔记-第一篇InternVL-g

一、TL&#xff1b;DR 将之前所有训练过的大模型的过程都总结和回忆一下&#xff0c;遇到的坑别忘了 二、问题记录 还是注意镜像的选择&#xff0c;选择社区最火的镜像&#xff0c;然后下载好对应的数据&#xff0c;主要显卡的选择&#xff0c;这个时候4090已经带不动了&…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...