Python必知必会:程序员必须知道的22个Python单行代码!

news2024/11/17 9:41:48

今天给大家分享24个每个Python程序员都必须知道的单行代码,帮你写出更简洁、更优雅、更高效的代码。
在这里插入图片描述

1. 列表推导式

列表推导式(List Comprehensions)可以提供一种简洁的方式创建列表。相较于传统的循环,列表推导式更高效、可读性更高。

# Bad   squares: list[int] = []   for i in range(1,11):       squares.append(i ** 2)   print(squares)   # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]      # Better   squares: list[int] = [i ** 2 for i in range(1,11)]   print(squares)   # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]   

2. 累积计算操作

Python的 reduce() 结合 operator 运算符模块可以实现数字的累积计算操作,比如累积求和、累积求积。

from operator import add, mul   from functools import reduce      cum_sum: int = reduce(add, range(1, 10))   print(cum_sum)      # 45      factorial: int = reduce(mul, range(1, 5))   print(factorial)    # 24   

3. lambda 实现排序

lambda 函数是你可以在单行代码中使用的匿名函数,对于像排序这样的任务很实用。

names: list[tuple[int, str]] = [(1, 'Jack'), (2, 'Alex'), (3, 'Bob')]   sorted_names: list = sorted(names, key=lambda x: x[1])   print(sorted_names)   # [(2, 'Alex'), (3, 'Bob'), (1, 'Jack')]   

这里,我们基于第二个元素(列表中的元组)对元组列表进行排序。类似地,将lambda 函数用作排序键,也可以基于字典的值对字典进行排序。

4. 字典合并

通过 ** 前缀可以将多个字典轻松合并为一个。

info1: dict = {'name': 'Jack', 'age': 28}   info2: dict = {'gender': 'Male', 'city': 'San Francisco'}   person_info: dict = {**info1, **info2}   print(person_info)   # {'name': 'Jack', 'age': 28, 'gender': 'Male', 'city': 'San Francisco'}   

多个字典(2个以上)也可以通过这种方式合并,相较于循环或其他函数,这种方式更简洁、高效。

5. 字典推导式

通过字典推导式我们可以根据可迭代对象快速创建字典。

keys: list[str] = ['name', 'age', 'gender']   values: list[str | int] = ['Jackzhang', 28, 'Male']   person_info: dict = {key: value for key, value in zip(keys, values)}   print(person_info)   # {'name': 'Jackzhang', 'age': 28, 'gender': 'Male'}   

相较于传统的循环方式,字典推导式更简洁和高效。

6. 获取字典的最大值

通过 lambda 函数可以轻松找到字典的最大值。

d: dict[str, int] = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}   max_key: str = max(d, key=lambda x: d[x])   print(max_key)  # e   

这个单行代码可以找到字典中找到最大值对应的键,这在像查找数据集中性能最佳的项目这样的任务中非常有用。

7. 子串成员关系检查

检测某个子串是否在目标字符串中使用一行代码即可搞定:

is_contain: bool = 'Python' in "I'm Jackzhang, I love Python"   print(is_contain)   # True   

这个单行代码可以检测某个字串是否在目标字符串中,对于像文本搜索或过滤这样的任务非常有用。

8. 回文检测(通过切片)

你可以通过切片反转检测一个字符串是否为回文(正序和倒序均是同一个字符串)。

is_palindrome = lambda x : x == x[::-1]   print(is_palindrome("level"))   # True   

这里,这个单行代码可以检测一个给定字符串是否为回文。切片操作 x[::-1] 会反转字符串,lambda 函数则会将其和原始字符串进行比较。

9. 字典反转

有时我们需要反转字典,即交换键和值。Python的字典推导可以优雅地处理这个任务。

d: dict = {'a': 1, 'b': 2, 'c': 3}   inverted_d: dict = dict(zip(d.values(), d.keys()))   print(inverted_d)   # {1: 'a', 2: 'b', 3: 'c'}   

这里,我们通过字典推导式和 zip() 函数很轻松地实现了字典的反转。当然,zip() 函数也可以用循环替代:

inverted_d: dict = {v: k for k, v in d.items()}   

很明显,使用 zip() 函数更简洁高效。这个单行代码可以轻松实现字典的反转,这对于像逆向查找这样的场景非常有用。

10. zip() 实现元素配对

细心的朋友应该注意到了,我们在前面的多个场景中都用到了 zip() 函数。它可以实现多个列表元素的一一配对(结果为元组),简化组合数据集的创建。

names: list[str] = ['Jack', 'Alex', 'Jim']   ages: list[int] = [18, 25, 20]   combined_info: list[tuple] = list(zip(names, ages))   print(combined_info)   # [('Jack', 18), ('Alex', 25), ('Jim', 20)]   

注意,若多个列表的长度不同,则结果列表的长度以最短列表为准。zip() 函数对于合并不同来源的数据任务非常有用。

11. 获取两个列表的交集

我们都知道,在数学中,集合不允许重复元素的存在。利用这一特性,我们可以轻松计算两个列表的交集。

list1: list[int] = [1, 2, 3, 4, 5]   list2: list[int] = [3, 4, 5, 6, 7]   intersection: list[int] = list(set(list1) & set(list2))   print(intersection)     # [3, 4, 5]   

12. 简化多条件检查

any()all() 可以有效简化多条件检查,避免多重 orany())和 andall())语句的使用。

values: list[int] = [1, 2, -3, 4, 5]   has_greater: bool = any([x > 4 for x in values])   all_positive: bool = all([x > 0 for x in values])   print(has_greater, all_positive)    # True False   

13. 根据字典生成字典

在Python中,我们可以通过两个列表简单而直观的创建字典。

keys: list[str] = ['name', 'age', 'gender']   values: list[str | int] = ['Jackzhang', 28, 'Male']   person_info: dict = dict(zip(keys, values))   print(person_info)   # {'name': 'Jackzhang', 'age': 28, 'gender': 'Male'}   

14. 使用 map() 转换列表

map() 可以将一个转换函数应用到可迭代对象中每个元素上,它非常适合用于批量转换的场景。

name: list[str] = ['jack', 'zhang']   capital_name: list[str] = list(map(str.capitalize, name))   print(capital_name) # ['Jack', 'Zhang']   

这里,我们使用 map() 将列表中的字符串首字母转换为大写。相较于通过循环执行转换,map() 函数将 str.capitalize 方法应用到列表中的每个元素上,简化了转换过程,且内置函数底层经过优化,效率更高。

15. 获取可迭代对象元素的索引

通过 index(element) 方法可以轻松获取列表中元素的索引:

idx = [1, 2, 3, 4, 5].index(5)   print(index)  # 4   

16. 单行代码实现嵌套循环

我们可以用一行代码通过列表推导式实现二级嵌套循环:

names: list[str] = ['Jack', 'Bob']   ages: list[int] = [18, 25, 20]   person_info: list[tuple[str, int]] = [(name, age)                                          for name in names for age in ages]   for name, age in person_info:       print(name, age)   # Output   Jack 18   Jack 25   Jack 20   Bob 18   Bob 25   Bob 20   

17. 单行代码实现数据过滤

在编程中,数据过滤是一项常见的任务,Python允许你使用列表推导式来高效完成。比如,筛选偶数:

even_numbers: list[int] = [x for x in range(1, 11) if x % 2 == 0]   print(even_numbers) # [2, 4, 6, 8, 10]   

18. 列表元素去重

利用数学中集合不包含重复元素的特性可以轻松对列表元素去重。

unique_numbers = list(set([1, 2, 2, 4, 5, 4, 3, 2]))   print(unique_numbers)   # [1, 2, 3, 4, 5]   

这个单行代码可以去除列表中的重复值,确保只保留唯一值,这常常用在数据清洗任务中。

19. 列表→字符串

在Python中,使用 join() 方法可以轻松将字符串列表转换为单个字符串。

info: list[str] = ['I', 'love', 'Python', 'coding', 'programming!']   joined_info = ' '.join(info)   print(joined_info)   # I love Python coding programming!   

这个方法在文本处理任务重非常有用,比如合并单词或句子。

20. 一次性读取文件内容

通过 readlines() 方法可以一次性读取文件内容:

lines: list = [line.strip() for line in open('test.txt')]   print(lines)   # ['line1', 'line2', 'line3']   

这个单行代码可以读取文件的所有行,并且移除任意额外的空格,常常用在文件处理中。

21. 字串替换

通过 replace() 方法,Python可以轻松替换字符串中的部分子串:

exp_str: str = 'I love Java'.replace('Java', 'Python')   print(exp_str)  # I love Python   

22. 嵌套列表展开

在处理嵌套列表时,通常我们需要将它们展开平铺为单个列表,Python提供了简单的方式实现这个需求:

nested_list: list[list[int]] = [[1, 2, 3], [4, 5, 6]]   flat_list: list[int] = [number for sublist in nested_list                           for number in sublist]   print(flat_list)    # [1, 2, 3, 4, 5, 6]   

**

关于Python技术储备

**
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
在这里插入图片描述

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

👉Python必备开发工具👈

在这里插入图片描述

👉Python学习视频合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

👉实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。
在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方二维码免费领取

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

240909-ChuanhuChatGPT集成Ollama的环境配置

A. 最终效果 B. 需求文件 requirements.txt (至少需要安装这个,具体参见官网)requirements_advanced.txt (如果安装了Ollama,并且可以进行对话,可以不需要安装,具体参见官网)requirements_succcess.txt&am…

Qt5.4.1连接odbc驱动操作达梦数据库

Qt5.4.1连接odbc驱动操作达梦数据库 1 环境介绍2 Qt5.4.1 安装2.1 图形化界面安装Qt5.4.12.2 配置Qt5.4.1 环境变量2.3 Qt5.4.1 生成 libqsqlodbc.so 并配置2.3.1 生成Makefile2.3.2 查看 libqsqlodbc.so 文件并配置 3 配置Qt测试用例4 达梦数据库学习使用列表 1 环境介绍 CPU…

SAP加密解密功能设计

SAP加密解密功能设计 【场景】与外围系统对接时,出于信息安全等因素,经常需要对传输的信息做加密解密控制。 1. 公用类zcl_aes_utility *----------------------------------------------------------------------* * CLASS ZCL_AES_UTILITY DEFI…

Ubuntu 22.04 安装增强功能失败

安装的时候,总是失败,然后根据提示查看 log 猜测可能需要安装g12 ubuntu22.04.2 目前(until 23.6.25) gcc 的默认版本是 11.3.0, 有些 c 的特性无法享用.Launchpad toolchain test buildsLanchpad toolchain build 将 Lanchpad 上的 PPA 加入到 apt 搜…

用Python包加速你的视频剪辑:Tailor工具全解析

Tailor是一款视频智能裁剪、视频生成和视频优化的视频剪辑工具。目前的目标是通过人工智能技术减少视频剪辑的繁琐操作,让普通人也能简单实现专业剪辑人的水准!长远目标是让视频剪辑实现真正的AIGC! 当然,这是一份Python包的列表…

分组注解和自定义注解及分页查询

自定义注解的使用步骤 案例: 此时state需要进行的校验使用普通方式无法满足,需要我们根据需求进行自定义注解 创建一个注解 Documented//元注解 Retention(RetentionPolicy.RUNTIME)//元注解 Constraint(validatedBy {StateValidation.class}//指定提供…

DPDK基础入门(七):网卡性能优化

DPDK的轮询模式 运行在操作系统内核态的网卡驱动程序基本都是基于异步中断处理模式,而DPDK采用了轮询或者轮询混杂中断的模式来进行收包和发包。 任何包进入到网卡,网卡硬件会进行必要的检查、计算、解析和过滤等,最终包会进入物理端口的某…

最高1000万 各地模型和算法备案补贴政策一览

最高1000万 各地模型和算法备案补贴政策一览 2024年7月31日,成都市的人工智能产业再度引起关注。通过国家大模型备案的三家企业——海艺互娱、晓多科技和明途科技,获得了成都市经信局市新经济委的百万奖励。这一奖励源自成都发布的《成都市进一步促进人工…

手把手带你拿捏指针(1)

文章目录 一、内存和地址1.内存编号、地址和指针的关系2.对于编址的理解 二、指针变量和地址1.取地址操作符&2.指针变量3.解引用操作符(*)4.指针变量的大小 三、指针变量类型的意义1.指针解引用2.指针-整数3.void*指针 四、const修饰指针1.const修饰变量2.const修饰指针变量…

避障小车—51单片机

一、小车底盘组装 根据视频的安装步骤安装 二、 电机模块开发 2.1 L9110s概述 接通VCC,GND 模块电源指示灯亮, 以下资料来源官方,但是不对,根据下节课实际调试 IA1输入高电平,IA1输入低电平,【OA1 OB1…

【项目二】C++高性能服务器开发——日志系统(终章)

感谢sylar,感谢开源笔记的所有人~ 知识点备忘录switch结合宏定义简化获取时间戳获取行号获取线程ID 知识点备忘录 上一篇适配器后得到的输出是下面这样,在main函数中定义了需要的一切,和项目所需要的还相差很远,比如日志级别需要…

通过AI来创建一个_____html css网页制作成品 例子演示

使用AI 输入创建一个 html css网页制作成品 例 然后出来 好的,我将为您创建一个简单的HTML和CSS网页制作的示例。这个示例将包括基本的布局、文本样式和一些内联的CSS样式。 { "name": "dalle", "description": "A simple exa…

价值流思维:全面提升业务效率与企业竞争力的核心方法论

价值流驱动的企业架构转型 在数字化浪潮的推动下,企业面临前所未有的竞争压力和业务复杂性。如何在动态市场环境中保持竞争优势,已经成为企业管理者亟待解决的问题。《价值流指南》由The Open Group发布的企业数字化转型专业参考指南,系统化…

为啥有人累死累活,还是穷?

咱们今天不聊怎么发财,来聊聊“为啥有人穷”。一说穷,大家第一反应就是钱不够花,但少有人想到,穷还可能是精神上的、思想上的、道德上的。表面看缺钱,背后往往有更深的原因。 记得《我不是药神》里那假药贩子张长林吗&…

【Redis】Redis 典型应用 - 缓存 (Cache) 原理与策略

目录 Redis 典型应⽤ - 缓存 (cache)什么是缓存使⽤ Redis 作为缓存缓存的更新策略1)定期⽣成2)实时生成 缓存预热,缓存穿透,缓存雪崩 和 缓存击穿关于缓存预热 (Cache preheating)什么是缓存预热 关于缓存穿透 (Cache penetration)什么是缓存穿透为何产…

Kafka API操作

文章目录 1、 Kafka 基础API1_Topic基本操作 DML管理2_生产者3_消费者 sub/assign4_自定义分区策略5_序列化6_拦截器 2、Kafka API高级特性1_Offset自动控制2_Acks & Retries3_幂等性4_事务控制1、生产者事务Only2、消费者&生产者事务3、测试需要的三个消费者案例属性 …

【Rust】Mdbook插件开发和分享——多图浏览和多语言代码

mdbook-image-slider 受DevExpress文档多图浏览的启发,我开发这个插件,在查看多个图片和图片的描述的时候非常方便 项目地址:https://github.com/VinciYan/mdbook-image-slider.git 特点 鼠标置于图片查看区域时显示切换图片按钮鼠标点击图…

chapter14-集合——(collection)——day17

目录 499-集合介绍 500-集合体系图 背下来 501-Collection方法 502-迭代器遍历 itit(迭代器快捷键)(Ctrlj) 503-集合增强for 快捷I 504-测试题 499-集合介绍 500-集合体系图 背下来 单列集合 双列集合(键值对&am…

如何根据屋顶的面积和形状设计光伏板的排布?

首先我们得了解项目的具体的情况数据: 测量屋顶尺寸:准确测量屋顶的长、宽等数据,了解其面积大小 分析屋顶形状:观察屋顶是平顶、坡顶还是其他形状,这会影响排布方式。 支架的排布:要保证发电量的同时&a…

序列标注任务

序列标注任务 1.序列标注任务2.序列标注--中文分词2.1数据标注方法一2.2数据标注方法二 3.序列标注--NER3.1序列标注--CRF3.2篱笆墙解码3.3beam search3.4维特比解码3.5效率对比3.6评价指标 4.基于规则-NER4.1序列标注--文本加标点4.2序列标注--句子级别分类4.3实体抽取问题4.4…