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

Python面试高频100题【11~15题】

Python面试必知100例。收集整理了目前Python岗位常见的面试题,希望大家通过学习理解相关知识点。下面介绍的是11~15道题。

十一、请介绍下Python中单下划线与双下划线区别

在Python中,单下划线和双下划线主要用于命名变量和方法,而它们具有不同的含义。

  1. 单下划线 _
  • 单下划线开头(例如 _var)是一种约定,用来指示这个名称是供内部使用的。它告诉读代码的人该变量或者方法主要被用于类或模块的内部,尽管Python并不会真正地阻止你在外部访问它。
class MyClass:def __init__(self):self._internal_var = 10def internal_method(self):passobj = MyClass()
print(obj._internal_var)  # 可以访问,但是应该避免这么做
  1. 双下划线 __
  • 双下划线开头(例如 __var)表示这个变量或方法不仅仅是用于内部,Python会对其进行名称修饰(name mangling),用来避免命名冲突。这意味着类定义中以双下划线开头的名称如 __var 实际上会被改写为 _classname__var
class MyClass:def __init__(self):self.__internal_var = 10obj = MyClass()
print(obj.__internal_var)  # 这会引发AttributeError错误
print(obj._MyClass__internal_var)  # 这样可以访问

双下划线开头和结尾的变量(例如 var)是特殊变量,它们有特殊的含义,这些变量通常被称为"魔术"变量或方法。比如 initstr 等。

class MyClass:def __init__(self, value):self.value = valuedef __str__(self):return f"MyClass with value {self.value}"obj = MyClass(10)
print(obj)  # 输出:MyClass with value 10

十二、一个服务器有4GB的内存,怎么去读取5GB 的数据?

当需要处理的数据集大于可用内存时,我们不能一次性将所有数据加载到内存中。但我们可以使用一些策略来处理这种情况:

  1. 分块处理(Chunking):这种方法涉及到将数据分割成小块,每次只读取一部分到内存中进行处理。例如,如果你正在处理一个大文件,你可以使用Python的文件读取方法,如read(size)readline(),每次只读取一部分数据。
  2. 流处理(Streaming):如果数据可以按照某种顺序处理,你可以使用流处理,也就是一次处理一个数据项,然后丢弃它,再处理下一个。这种方式常常用于处理日志文件或网络流等。
  3. 使用内存映射文件:内存映射文件是一种将文件的一部分或全部映射到内存空间的技术,使得这部分文件能够像内存一样被访问。Python的mmap模块提供了这种功能。但需要注意的是,这种方法适用于随机访问文件,不适合顺序读取大文件。
  4. 使用分布式计算:如果数据非常大,而且不能在单机上处理,那么可以考虑使用分布式计算框架,如Hadoop或Spark,将数据分布在多个机器上进行处理。

十三、如何对列表中的元素进行去重?

在Python中,对列表进行去重的一个常见方法是使用set数据结构,然后再转回到list。因为在set中,所有元素都是唯一的。以下是一个简单的代码示例:

def remove_duplicates(lst):return list(set(lst))original_list = [1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9]
print(remove_duplicates(original_list))  # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

需要注意的是,使用set进行去重会丢失原始列表的顺序。如果你希望保留元素的顺序,你可以使用dict从Python 3.7开始,字典保持了插入顺序,所以我们可以通过将列表元素作为字典的键来达到去重且保持顺序的效果。

def remove_duplicates_keep_order(lst):return list(dict.fromkeys(lst))original_list = [1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 8, 9]
print(remove_duplicates_keep_order(original_list))  # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

十四、如果列表里面的元素是字典,怎么对列表里面的元素进行去重?

在Python中,列表的元素如果是字典的话,通常情况下不能直接进行去重,因为字典是不可哈希的(unhashable),不能被用作集合(set)或字典的键。但我们可以通过一些其他的方法来去重。

  1. 使用json序列化:我们可以先将字典转化为JSON字符串,然后添加到集合(set)中,因为集合会自动去重。然后再将去重后的JSON字符串转回字典。
import json# 列表中的元素是字典
list_of_dicts = [{"a": 1, "b": 2}, {"a": 1, "b": 2}, {"a": 3, "b": 4}]# 初始化一个空集合来存储json字符串
json_set = set()# 遍历列表中的每个字典
for d in list_of_dicts:# 将字典转化为排序后的json字符串,然后添加到集合中json_set.add(json.dumps(d, sort_keys=True))# 初始化一个空列表来存储去重后的字典
unique_dicts = []# 遍历集合中的每个json字符串
for i in json_set:# 将json字符串转回字典,然后添加到列表中unique_dicts.append(json.loads(i))print(unique_dicts)
  1. 使用元组作为键
# 列表中的元素是字典
list_of_dicts = [{"a": 1, "b": 2}, {"a": 1, "b": 2}, {"a": 3, "b": 4}]# 初始化一个空集合来存储元组
tuple_set = set()# 遍历列表中的每个字典
for d in list_of_dicts:# 将字典的键值对排序后转化为元组,然后添加到集合中tuple_set.add(tuple(sorted(d.items())))# 初始化一个空列表来存储去重后的字典
unique_dicts = []# 遍历集合中的每个元组
for t in tuple_set:# 将元组转回字典,然后添加到列表中unique_dicts.append(dict(t))print(unique_dicts)

十五、请列举一些正则相关的用法

正则表达式是处理字符串的强大工具,它可以用于匹配、查找、替换特定模式的字符串。Python中的re模块提供了正则表达式相关的操作。
以下是一些基本的正则表达式的使用方法:

  1. 查找匹配的字符串:**re.search()**函数会在字符串中搜索匹配正则表达式的第一个位置,并返回一个匹配对象,如果没有找到匹配的则返回None。
import reresult = re.search('Python', 'I love Python')
if result:print("Match found")
else:print("Match not found")
  1. 查找所有匹配的字符串:**re.findall()**函数会返回一个列表,包含字符串中所有匹配正则表达式的部分。
import reresult = re.findall('a', 'I am a Python developer')
print(result)  # 输出:['a', 'a', 'a']
  1. 替换匹配的字符串:**re.sub()**函数会将字符串中匹配正则表达式的部分替换为指定的字符串。
import reresult = re.sub('Python', 'Java', 'I am a Python developer')
print(result)  # 输出:'I am a Java developer'
  1. 分割字符串:**re.split()**函数可以按照正则表达式匹配的部分来分割字符串。
import reresult = re.split('\s', 'I am a Python developer')
print(result)  # 输出:['I', 'am', 'a', 'Python', 'developer']
  1. 编译正则表达式:如果你有一个正则表达式需要重复使用,那么可以使用**re.compile()**来提前编译这个正则表达式,这样可以提高效率。
import repattern = re.compile('Python')
result = pattern.search('I love Python')
print(result.group())  # 输出:'Python'

以上都是一些基本的用法,实际上正则表达式的功能远不止于此,它有很多的匹配模式和特殊序列可以用于处理复杂的字符串匹配和操作。

关注我,后续题目不断更新中

相关文章:

Python面试高频100题【11~15题】

Python面试必知100例。收集整理了目前Python岗位常见的面试题,希望大家通过学习理解相关知识点。下面介绍的是11~15道题。 十一、请介绍下Python中单下划线与双下划线区别 在Python中,单下划线和双下划线主要用于命名变量和方法,而它们具有不…...

Linux下Redis 存储

命令使用 目录 命令使用 RDB持久化 AOF持久化 yum安装 [rootlocalhost ~]# yum -y install redis 已加载插件:fastestmirror Loading mirror speeds from cached hostfile* c7-media: * epel: ftp.yz.yamagata-u.ac.jpvim到文件etc/redis.conf 取消注释requirep…...

QML 快速上手3 - QuickControl2

目录 QuickControl2简介风格设置control 配置文件图像浏览器案例component 组件报错问题StackViewSwipeView QuickControl2 简介 quickcontrol 用于快速构建风格化的用户界面 它包括了以下几个预制的组件风格 Default QT 默认风格Universal windows 桌面风格Material 谷歌推…...

QT Creator写一个简单的电压电流显示器

前言 本文主要涉及上位机对接收的串口数据处理,LCD Number控件的使用。之前的一篇写一个简单的LED控制主要是串口发出数据,这里再看一下怎么接收数据处理数据,这样基本就对串口上位机有简单的认识了。 LCD Number显示时间 这一小节通过用一…...

前端需要的技能

语言: 1,熟练掌握html5,css3,javascript,ajax 2,掌握PHP、java、python中至少一种web开发语言 3,库/框架:MooTools,YUI,Angular,jQuery,Dojo. 4,UI框架:BootStrap,Founda…...

Qt——Qt控件之基于模型的项目视图组-QTreeView树形视图控件的使用总结(Qt仿word标题列表的实现)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》...

spring boot框架步骤

目录 1. 创建一个新的Spring Boot项目2. 添加所需的依赖3. 编写应用程序代码4. 配置应用程序5. 运行应用程序6. 编写和运行测试7. 部署应用程序 总结 当使用Spring Boot框架开发应用程序时,以下是一些详细的步骤: 1. 创建一个新的Spring Boot项目 使用…...

动态创建select

1.动态创建select function createSelect(){ var mySelect document.createElement("select"); mySelect.id "mySelect"; document.body.appendChild(mySelect); } 2.添加选项option function addOption(){ //根据id查找对象, var objdoc…...

linux-centos7操作系统查看系统未挂载的磁盘,挂载磁盘

linux-centos7操作系统查看系统未挂载的磁盘,挂载磁盘 查看当前磁盘空间 根目录 / 下也只有44G,其他目录只有10几G,正式环境肯定不够用 df -h查看硬盘数量和分区情况 fdisk -l查看到/dev/vdb 有500多G了 将/dev/vdb在分出一个区使用 第一步:编辑分区。执行命令fdisk …...

STM32软件定时器

目录 什么是定时器? 软件定时器优缺点 软件定时器原理 软件定时器相关配置 单次定时器和周期定时器 软件定时器相关 API 函数 1. 创建软件定时器 2. 开启软件定时器 3. 停止软件定时器 4. 复位软件定时器 5. 更改软件定时器定时时间 实操 cubeMX配置 …...

[论文阅读] (30)李沐老师视频学习——3.研究的艺术·讲好故事和论点

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…...

Java中List、Set、Map的区别和实现方式

Java中List、Set、Map的区别和实现方式 List List 是一个有序的集合,即元素按照插入的顺序进行排序,可以有重复的元素。因为是有序的,所以可以根据下标来获取元素或者遍历整个集合内的元素。常用的实现类包括 ArrayList 和 LinkedList。 A…...

@EnableScheduling和@Scheduled注解详解fixedrate和fixeddelay的区别

一、pom.xml中导入必要的依赖&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.1.RELEASE</version></parent><dependencies><…...

打印金字塔图案总结

那么好了好了&#xff0c;宝子们&#xff0c;今天给大家总结一下“打印金字塔图案”&#xff0c;来吧&#xff0c;开始整活&#xff01;⛳️ 最近在牛客网上刷题&#xff0c;遇到了这个打印类型的题目&#xff0c;我想总结一下&#xff0c;然后分享给大家。 一、正向金字塔 …...

SQL语句的执行顺序

1、SQL语句的一般执行顺序 1 from 找表 2 on 关联条件帅选 3 join 关联表操作 4 where 条件筛选 5 group by 进行分组 6 avg,sum… 执行函数 7 having 分组后筛选 8 select …...

Debian 版本代号与《玩具总动员》

作为最受欢迎的 Linux 发行版之一&#xff0c;Debian 是许多其他发行版的基础&#xff0c;许多非常受欢迎的 Linux 发行版&#xff0c;例如 Ubuntu、Knoppix、PureOS 、Tails、Armbian 以及 Raspbian&#xff0c;都基于 Debian。 经过近 20 个月的开发&#xff0c;2023 年 6 月…...

TypeScript 第一章

欢迎来到 TypeScript 学习&#xff01;本章将为您介绍 TypeScript 的基础知识。 TypeScript 是 JavaScript 的一个超集&#xff0c;它提供了静态类型检查、类、接口等特性&#xff0c;使得编写大型应用程序变得更加容易和可维护。TypeScript 编写的代码可以被编译成 JavaScript…...

【SpringCloud入门】-- Ribbon入门

1.什么是Ribbon&#xff1f; Ribbon就是netflix公司的一个开源项目&#xff0c;主要功能是提供客户端负载均衡算法和服务调用。Ribbon客户端组件提供了完善的配置项&#xff0c;如连接超时&#xff0c;重试等等。Ribbon作为服务消费者的负载均衡器&#xff0c;有两种使用方式&…...

(二)Liunx下ElasticSearch快速搭建

1.下载安装 1&#xff09;环境准备&#xff1a; 操作系统&#xff1a;centos7 es版本&#xff1a;8.8.1 jdk:17 es与jdk等兼容支持查看 2&#xff09;下载安装包上传到服务器&#xff0c;官网地址 https://www.elastic.co/cn/downloads/elasticsearch 3&#xff09;解压文件…...

神经网络编程基础

目录 1、二分类(Binary Classification) 2、逻辑回归(Logistic Regression) 3、逻辑回归的代价函数&#xff08;Logistic Regression Cost Function&#xff09; 4、梯度下降法&#xff08;Gradient Descent&#xff09; 5、使用计算图求导数 6、逻辑回归中的梯度下降&…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...