Python常见面试题的详解6

1. 按字典 value 值排序
  • 要点:对于给定字典,使用 sorted() 函数结合 items() 方法,依据 value 进行排序,也可以定义一个通用函数,支持按 value 升序或降序排序。
  • 示例:

python

d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# 对字典 d 按值排序,lambda 函数指定排序依据为元素的第二个值(即 value)
sorted_d = dict(sorted(d.items(), key=lambda item: item[1]))
print(sorted_d)

#通用函数方式
def sort_dict_by_value(d, reverse=False):
    return dict(sorted(d.items(), key=lambda item: item[1], reverse=reverse))

d = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
print(sort_dict_by_value(d))
print(sort_dict_by_value(d, reverse=True))
2. 字典推导式的用法和作用
  • 要点:字典推导式是简洁创建字典的方式,类似列表推导式,可以结合条件判断,只将满足条件的元素纳入字典。
  • 示例:

python

numbers = [1, 2, 3, 4]
# 通过字典推导式,将列表元素作为键,其平方作为值创建字典
squared_dict = {num: num**2 for num in numbers}
print(squared_dict)


#只将满足条件的元素纳入字典
numbers = [1, 2, 3, 4, 5]
# 只将偶数的平方纳入字典
squared_dict = {num: num**2 for num in numbers if num % 2 == 0}
print(squared_dict)
3. 字符串转字典
  • 要点:将特定格式字符串按规则分割处理,转换为字典,如果字符串格式比较复杂,如包含引号,可以增加处理逻辑。
  • 示例:

python

s = "a:1 |a1:2|a2:3|a3:4"
result = {}
# 去除字符串中的空格并按 | 分割成键值对列表
pairs = s.replace(" ", "").split("|")
for pair in pairs:
    # 将每个键值对按 : 分割
    key, value = pair.split(":")
    result[key] = int(value)
print(result)

# 复杂格式处理

s = ' "a":1 | "a1":2 | "a2":3 | "a3":4 '
result = {}
pairs = s.replace(" ", "").replace('"', "").split("|")
for pair in pairs:
    key, value = pair.split(":")
    result[key] = int(value)
print(result)
4. 按列表元素 age 排序
  • 要点:对包含字典的列表,按字典中的 age 键值从大到小排序,也可以定义一个更灵活的排序函数,支持按不同键排序。
  • 示例:

python

alist = [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 20}, {'name': 'Charlie', 'age': 30}]
# 使用 sorted 函数,通过 lambda 函数指定按 age 排序,reverse=True 表示降序
sorted_alist = sorted(alist, key=lambda x: x['age'], reverse=True)
print(sorted_alist)


# 定义排序函数,支持按不同键排序
def sort_list_of_dicts(lst, key, reverse=False):
    return sorted(lst, key=lambda x: x[key], reverse=reverse)

alist = [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 20}, {'name': 'Charlie', 'age': 30}]
print(sort_list_of_dicts(alist, 'age', reverse=True))
5. 写出列表切片的结果
  • 要点:如果列表切片索引超出范围时,会返回空列表。
  • 示例:

python

my_list = ['a', 'b', 'c', 'd', 'e']
# 切片索引 11 超出列表长度,返回空列表
print(my_list[11:])
6. 列表生成式产生等差数列
  • 要点:使用列表生成式创建公差为 7 的等差数列,也可以将其封装成函数,方便生成不同首项和公差的等差数列
  • 示例:

python

first_term = 3  # 等差数列首项
num_terms = 10  # 等差数列项数
# 通过列表生成式生成公差为 7 的等差数列
sequence = [first_term + i * 7 for i in range(num_terms)]
print(sequence)

# 函数方式
def arithmetic_sequence(first_term, common_difference, num_terms):
    return [first_term + i * common_difference for i in range(num_terms)]

print(arithmetic_sequence(3, 7, 10))
7. 找出两列表相同与不同元素
  • 要点:利用集合的交集和对称差集操作,找出两列表相同和不同元素,也可以处理多个列表,找出所有列表的公共元素和不同元素
  • 示例:

python

list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
# 将列表转换为集合
set1 = set(list1)
set2 = set(list2)
# 求交集得到相同元素
common_elements = list(set1.intersection(set2))
# 求对称差集得到不同元素
different_elements = list(set1.symmetric_difference(set2))
print("相同的元素:", common_elements)
print("不同的元素:", different_elements)

# 多列表方式

lists = [[1, 2, 3, 4, 5], [4, 5, 6, 7, 8], [5, 6, 7, 8, 9]]
sets = [set(lst) for lst in lists]
# 求所有集合的交集
common = list(set.intersection(*sets))
# 先合并所有集合,再求与交集的差集
all_elements = set.union(*sets)
different = list(all_elements - set(common))
print("相同的元素:", common)
print("不同的元素:", different)
8. 删除列表重复元素
  • 要点:使用集合去除列表重复元素,再转换回列表,如果需要保留列表元素的原有顺序,可以使用 dict.fromkeys() 方法。
  • 示例:

python

my_list = [1, 2, 2, 3, 4, 4, 5]
# 利用集合的唯一性去除重复元素
unique_list = list(set(my_list))
print(unique_list)

# 去重并且保留原来的顺序
my_list = [1, 2, 2, 3, 4, 4, 5]
unique_list = list(dict.fromkeys(my_list))
print(unique_list)
9. 新式类和经典类有什么区别
  • 要点:新式类和经典类在继承顺序、基类、属性查找和 __slots__ 属性支持上存在差异。Python 3 只有新式类,Python 2 需显式继承 object 类创建新式类。
  • 示例:

python

# Python 2 代码示例,Python 3 只有新式类
# 经典类
class A:
    def method(self):
        print("A's method")

class B(A):
    pass

class C(A):
    def method(self):
        print("C's method")

class D(B, C):
    pass

d = D()
d.method()  # 经典类采用深度优先,输出 A's method

# 新式类
class A_new(object):
    def method(self):
        print("A_new's method")

class B_new(A_new):
    pass

class C_new(A_new):
    def method(self):
        print("C_new's method")

class D_new(B_new, C_new):
    pass

d_new = D_new()
d_new.method()  # 新式类采用 C3 线性化,输出 C_new's method

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2、树莓派5第一次开机三种方式:使用外设 / 使用网线 / 使用wifi

本文整理了树莓派第一次开机方式,供大家参考 方式一:连接鼠标、键盘、显示器外设开机 树莓派自带USB接口及HDMI接口,因此可以通过USB连接鼠标键盘,HDMI接入显示器,再进行电源供电,就可以完成第一次开机 …

案例-02.部门管理-查询

一.查询部门-需求 二.查询部门-思路 API接口文档 三.代码实现 1.controller层:负责与前端进行交互,接收前端所发来的请求 注:Slf4j用于记录日志使用,可以省略private static Logger log LoggerFactory.getLogger(DeptControlle…

小程序包体积优化指南:静态资源条件编译与分包编译技巧

在开发小程序时,可能大家都遇到过包体积超限的情况,这对多平台支持、用户体验和加载速度带来不少困扰。UniApp 提供了一些强大的功能,比如静态资源的条件编译和分包编译,这些功能可以帮助我们减少小程序的包体积,提高加…

12. QT控件:多元素控件

0. 概述 Qt中提供的多元素控件 QListWidget QListView QTableWidget QTableView QTreeWidget QTreeView xxWidget 和 xxView的区别 以QTableWidget 和 QTableView 为例: QTableView 是基于MVC设计的控件,QTableView自身不持有数据。使用QTableView需…

CAS单点登录(第7版)20.用户界面

如有疑问,请看视频:CAS单点登录(第7版) 用户界面 概述 概述 对 CAS 用户界面 (UI) 进行品牌化涉及编辑 CSS 样式表以及一小部分相对简单的 HTML 包含文件,也称为视图。(可选&…

android 的抓包工具

charles 抓包工具 官网地址 nullCharles Web Debugging Proxy - Official Sitehttps://www.charlesproxy.com/使用手册一定记得看官网 SSL Certificates • Charles Web Debugging Proxy http请求: 1.启动代理: 2.设置设备端口 3.手机连接当前代理 …

关于视频去水印的一点尝试

一. 视频去水印的几种方法 1. 使用ffmpeg delogo滤镜 delogo 滤镜的原理是通过插值算法,用水印周围的像素填充水印的位置。 示例: ffmpeg -i input.mp4 -filter_complex "[0:v]delogox420:y920:w1070:h60" output.mp4 该命令表示通过滤镜…

预测技术在美团弹性伸缩场景的探索与应用

管理企业大规模服务的弹性伸缩场景中,往往会面临着两个挑战:第一个挑战是精准的负载预测,由于应用实例的启动需要一定预热时间,被动响应式伸缩会在一段时间内影响服务质量;第二个挑战是高效的资源分配,即在…

【含开题报告+文档+PPT+源码】基于Spring+Vue的拾光印记婚纱影楼管理系统

开题报告 本论文旨在探讨基于Spring和Vue框架的拾光印记婚纱影楼管理系统的设计与实现。该系统集成了用户注册登录、个人资料修改、婚庆资讯浏览、婚庆套餐查看、婚纱拍摄预约、婚纱浏览与租赁、客片查看以及在线客服等多项功能,为用户提供了一站式的婚纱影楼服务体…

ASP.NET Core 使用 FileStream 将 FileResult 文件发送到浏览器后删除该文件

FileStream 在向浏览器发送文件时节省了服务器内存和资源,但如果需要删除文件怎么办?本文介绍如何在发送文件后删除文件;用 C# 编写。 另请参阅:位图创建和下载 使用FileStream向浏览器发送数据效率更高,因为文件是从…

字节跳动后端二面

📍1. 数据库的事务性质,InnoDB是如何实现的? 数据库事务具有ACID特性,即原子性、一致性、隔离性和持久性。InnoDB通过以下机制实现这些特性: 🚀 实现细节: 原子性:通过undo log实…

【个人开发】cuda12.6安装vllm安装实践【内含踩坑经验】

1. 背景 vLLM是一个快速且易于使用的LLM推理和服务库。企业级应用比较普遍,尝试安装相关环境,尝试使用。 2. 环境 模块版本python3.10CUDA12.6torch2.5.1xformers0.0.28.post3flash_attn2.7.4vllm0.6.4.post1 2.1 安装flash_attn 具体选择什么版本&…

19.4.9 数据库方式操作Excel

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本节所说的操作Excel操作是讲如何把Excel作为数据库来操作。 通过COM来操作Excel操作,请参看第21.2节 在第19.3.4节【…

2024-2025年主流的开源向量数据库推荐

以下是2024-2025年主流的开源向量数据库推荐,涵盖其核心功能和应用场景: 1. Milvus 特点:专为大规模向量搜索设计,支持万亿级向量数据集的毫秒级搜索,适用于图像搜索、聊天机器人、化学结构搜索等场景。采用无状态架…

vue项目使用vite和vue-router实现history路由模式空白页以及404问题

开发项目的时候,我们一般都会使用路由,但是使用hash路由还是history路由成为了两种选择,因为hash路由在url中带有#号,history没有带#号,看起来更加自然美观。但是hash速度更快而且更通用,history需要配置很…

AI编程01-生成前/后端接口对表-豆包(或Deepseek+WPS的AI

前言: 做过全栈的工程师知道,如果一个APP的项目分别是前端/后端两个团队开发的话,那么原型设计之后,通过接口文档进行开发对接是非常必要的。 传统的方法是,大家一起定义一个接口文档,然后,前端和后端的工程师进行为何,现在AI的时代,是不是通过AI能协助呢,显然可以…

切换git仓库远程地址

1、首先可以先查看一下当前git库的远程地址 【cd .git】 切换到git目录【cat config】查看【cd ../】 返回项目目录 2、 切换到目标远程git地址 【git remote rm origin】 删除现有远程仓库 【git remote add origin url】添加新远程仓库 【cat .git/config】验证是否切换成功…

mapbox 从入门到精通 - 目录

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀总目录1.1 ☘️ mapbox基础1.2 ☘️…

前端包管理器的发展以及Npm、Yarn和Pnpm对比

在现代前端开发中,包管理器是不可或缺的核心工具。随着 JavaScript 生态的快速发展,开发者经历了从 npm 一统天下到 Yarn 挑战格局,再到 pnpm 创新突破的技术演进。这里将对三种主流包管理器(npm/Yarn/pnpm)进行全方位…