Python人一定要知道的13个代码片段(超有用,拒绝标题党!)

2023-11-19

Python人一定要知道的13个超有用的代码片段,这些日常片段将优化你的Python编程代码

当你每天使用Python来解决挑战、开发算法和构建应用程序时,你会发现自己在不断地重复一些任务。这就是为什么为通常执行的任务准备一些代码片段是一个很好的选择,这样你就可以在需要时直接在你的项目中使用它们。

列表式片段,我认为是 Python 最常用的数据结构–列表的片段开始。

№1: 将两个列表合并成一个字典

假设我们在 Python 中有两个列表,我们想把它们合并成一个字典的形式,其中一个列表的项作为字典的键,另一个作为值。这是一个在 Python 中编写代码时经常遇到的问题。

思考如何建立一本袖珍的黄页,例如:119是火警电话;110:报警电话等;字典是高效直观的数据结构,数据查询量极大的时候,字典的查询效率很高;

tel = [‘110’,‘119’] service = [‘报警’,‘火警’]

如何合并两个列表成为字典:

tel_service = {‘110’:‘报警’ ‘119’:‘火警’}

并且注意合并两个列表的长度是否一致?

列表的元素是否unique:是否唯一没有重复出现?

keys_list = ['A', 'B', 'C']  
values_list = ['blue', 'red', 'bold']  
  
#There are 3 ways to convert these two lists into a dictionary  
#1- Using Python's zip, dict functionz  
dict_method_1 = dict(zip(keys_list, values_list))  
  
#2- Using the zip function with dictionary comprehensions  
dict_method_2 = {key:value for key, value in zip(keys_list, values_list)}  
  
#3- Using the zip function with a loop  
items_tuples = zip(keys_list, values_list)   
dict_method_3 = {}   
for key, value in items_tuples:   
    if key in dict_method_3:   
        pass # To avoid repeating keys.  
    else:   
        dict_method_3[key] = value  

但是要解决这个问题,我们需要考虑一些限制,比如两个列表的大小,两个列表中的项目类型,以及其中是否有重复的项目,特别是在我们将用作键的列表中。我们可以通过使用像zip这样的内置函数来克服这个问题。

№2:将两个或多个列表合并为一个列表的列表

另一个常见的任务是当我们有两个或更多的列表时,我们想把它们都收集到一个大的列表中,其中小列表的所有第一项构成大列表的第一项。

例如,如果我有4个列表

[1,2,3],   
['a', 'b', 'c'],   
['h', 'e', 'y'],   
[4,5,6] 

我们想把这四个列表组成一个新的列表;

def merge(*args, missing_val = None):  
#missing_val will be used when one of the smaller lists is shorter tham the others.  
#Get the maximum length within the smaller lists.  
  max_length = max([len(lst) for lst in args])  
  outList = []  
  for i in range(max_length):  
    result.append([args[k][i] if i < len(args[k]) else missing_val for k in range(len(args))])  
  return outList  

它将是:

[[1, 'a', 'h',4], [2, 'b', 'e',5], [3, 'c', 'y', 6]]  

№3: 对一个字典列表进行排序

下一组日常列表任务是排序任务。根据列表中包含的项目的数据类型,我们将按照稍有不同的方式对它们进行排序。让我们首先从对字典列表的排序开始。

dicts_lists = [  
  {  
    "Name": "James",  
    "Age": 20,  
  },  
  {  
     "Name": "May",  
     "Age": 14,  
  },  
  {  
    "Name": "Katy",  
    "Age": 23,  
  }  
]  
  
#There are different ways to sort that list  
#1- Using the sort/ sorted function based on the age  
dicts_lists.sort(key=lambda item: item.get("Age"))  
  
#2- Using itemgetter module based on name  
from operator import itemgetter  
f = itemgetter('Name')  
dicts_lists.sort(key=f)  

№4:对字符串列表进行排序

我们经常会遇到包含字符串的列表,我们需要对这些列表按字母顺序、按长度或按我们想要或我们的应用程序需要的任何其他因素进行排序。

my_list = ["blue", "red", "green"]  
  
#1- Using sort or srted directly or with specifc keys  
my_list.sort() #sorts alphabetically or in an ascending order for numeric data   
my_list = sorted(my_list, key=len) #sorts the list based on the length of the strings from shortest to longest.   
# You can use reverse=True to flip the order  
  
#2- Using locale and functools   
import locale  
from functools import cmp_to_key  
my_list = sorted(my_list, key=cmp_to_key(locale.strcoll)) 

现在,我应该提到,这些是对字符串列表进行排序的直接方法,但你有时可能需要实现你的排序算法来解决这个问题。

№5:基于另一个列表的排序

有时,我们可能想/需要用一个列表来对另一个列表进行排序。所以,我们会有一个数字列表(索引)和一个我想用这些索引来排序的列表。

a = ['blue', 'green', 'orange', 'purple', 'yellow']  
b = [3, 2, 5, 4, 1]  
#Use list comprehensions to sort these lists  
sortedList =  [val for (_, val) in sorted(zip(b, a), key=lambda x: \  
          x[0])]  

№6: 将一个列表映射成一个字典

我们在这篇文章中要解决的最后一个与列表有关的任务是,如果给我们一个列表并将其映射成一个字典。也就是说,我想把我的列表转换成一个有数字键的字典。

mylist = ['blue', 'orange', 'green']  
#Map the list into a dict using the map, zip and dict functions  
mapped_dict = dict(zip(itr, map(fn, itr)))  

字典片段 下面我们要解决的数据类型是字典。

№7: 合并两个或多个字典

前方高能:using the collections module

假设我们有两个或更多的字典,我们想把它们都合并成一个具有唯一键的字典。

from collections import defaultdict  
#合并两个或多个字典  
#merge two or more dicts using the collections module  
def merge_dicts(*dicts):  
  mdict = defaultdict(list)  
  for d in dicts:  
    for key in d:  
      mdict[key].append(d[key])  
  return dict(mdict)  

№8: 倒置一个字典

一个很常见的字典任务是,如果我们有一个字典,想把它的键和值翻转过来。所以,键会变成值,而值会变成键。

my_dict = {  
  "brand": "Ford",  
  "model": "Mustang",  
  "year": 1964  
}  
#Invert the dictionary based on its content  
#1- If we know all values are unique.  
my_inverted_dict = dict(map(reversed, my_dict.items()))  
  
#2- If non-unique values exist  
from collections import defaultdict  
my_inverted_dict = defaultdict(list)  
{my_inverted_dict[v].append(k) for k, v in my_dict.items()}  
  
#3- If any of the values are not hashable  
my_dict = {value: key for key in my_inverted_dict for value in my_inverted_dict[key]}  

当我们这样做时,我们需要确保我没有重复的键,值可以重复,但键不能,并确保所有新的键是可散列的。

字符串摘录

№9:使用fstring 字符串

格式化字符串可能是你几乎每天都需要做的头号任务。在Python中,有多种方法可以格式化字符串;我最喜欢的方法是使用f字符串。

#Formatting strings with f string.  
str_val = 'books'  
num_val = 15  
print(f'{num_val} {str_val}') # 15 books  
print(f'{num_val % 2 = }') # 1  
print(f'{str_val!r}') # books  
  
#Dealing with floats  
price_val = 5.18362  
print(f'{price_val:.2f}') # 5.18  
  
#Formatting dates  
from datetime import datetime;  
date_val = datetime.utcnow()  
print(f'{date_val=:%Y-%m-%d}') # date_val=2021-09-24  

№10: 检查子串

我以前多次需要执行的一个非常普通的任务是检查一个字符串是否在一个字符串的列表中。
方法1:

addresses = ["123 Elm Street",   
            "531 Oak Street",   
            "678 Maple Street"]  
  
street = "Elm Street"  
  
#The top 2 methods to check if street in any of the items in the addresses list  
#1- Using the find method  
for address in addresses:  
    if address.find(street) >= 0:  
        print(address)  

方法2:

#2- Using the "in" keyword   
for address in addresses:  
    if street in address:  
        print(address)  

№11: 获取字符串的字节大小

有时,特别是在构建内存关键型的应用程序时,我们需要知道我们的字符串使用了多少内存。幸运的是,这可以通过一行代码快速完成。

str1 = "hello"  
str2 = "									
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python人一定要知道的13个代码片段(超有用,拒绝标题党!) 的相关文章

  • TypeError:使用一组 UDT 创建 Cassandra Python 驱动程序模型时不可散列的类型 UserType

    此问题与 Datastax Cassandra python 驱动程序的对象映射器有关 当尝试创建一个包含 UDT 集 作为字段的模型时 我收到错误 类型错误 不可散列的类型 UdtClassName 但是 我可以创建具有一组基本类型 例如
  • 如何在 Google App Engine (GAE) 上使用 bcrypt? [复制]

    这个问题在这里已经有答案了 我发现了一个 python 的 bcrypt 库 它似乎非常容易使用 比特加密 1 0 1 https pypi python org pypi bcrypt 1 0 1 安装它并在我的本地计算机上测试 hell
  • 如何取消选择单选按钮 tkinter

    我看过几个在线教程 它们似乎都不能正常工作 我需要在单击清除按钮后取消选择单选按钮 deselect 方法不执行任何操作 清除文本和输入框工作正常 请协助 谢谢你 from tkinter import class Example Fram
  • 从Python调用和控制GDB

    我正在运行一个 Python GUI 应用程序 我想从中调用和控制GDB 比如加载可执行文件 设置断点等 我看到GDB有一个命令行界面 可以通过向GDB进程发送字符串来使用它 但我想用Python方式来做 有没有gdb py 我看到 arc
  • scipy distance_transform_edt 函数如何工作?

    https docs scipy org doc scipy 0 14 0 reference generated scipy ndimage morphology distance transform edt html https doc
  • macOS Sierra 上的 Python PyQt

    如何在装有 OS X Sierra 的 Mac 上使用 PyQt 4 或 5 看来我必须等待 PyQt 的新版本 但我不确定这是否属实 确保你有homebrew https brew sh安装 使用以下命令 brew tap cartr q
  • 在张量流中保存模型

    Tensorflow 允许我们使用 tf train write graph 方法保存 加载模型的结构 以便我们可以在将来恢复它以继续我们的训练 但是 我想知道这是否有必要 因为我可以创建一个模块 例如 GraphDefinition py
  • Python:帮助计数器和写入文件[重复]

    这个问题在这里已经有答案了 可能的重复 Python 如何创建连续的文件名 https stackoverflow com questions 2400827 python how do i create sequential file n
  • 2 列 pandas 上的地图

    我有一个数据框 如下所示 Col1 Col2 0 A PY 1 B PA 2 C PB 3 B PB 以及这个系列 Value Col1 Col2 A PY 20 B PB 30 我想做一个映射 如果该系列有一个索引 仅前 Col1 那么它
  • Tweepy API v2 身份验证

    如何使用 API v2 测试 Tweepy 身份验证 我的下面的代码由于身份验证而无法发布 但是 是否有其他方法可以在不调用发布推文 client create tweet 的情况下测试身份验证 import tweepy bearer t
  • 如何在Spyder(Anaconda 3)上安装PIL?

    这是我使用 conda install PIL 继续安装时出现的问题 它给了我这个 UnsatisfiableError The following specifications were found to be in conflict p
  • Python 应用程序的最佳项目结构是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 想象一下 您想要用 Python 开发一个重要的最终用户桌面 不是 Web 应用程序 构建项目文件夹层次结构的最佳方法是什么 理想的特
  • Matplotlib 轮廓图有 3 种颜色

    我想用 3 种不同的颜色绘制等高线图 到目前为止 我的代码如下所示 import numpy as np import matplotlib pyplot as plt xMin 0 xMax 3 xList np linspace xMi
  • 是否可以模拟 Python 3.6 中的内置 len() 函数?

    是否可以模拟内置len Python 3 6 中的函数 我有一个类定义了一个简单的方法 该方法依赖于len 函数如下 class MyLenFunc object def is longer than three characters se
  • Python Nose 导入错误

    我似乎无法理解鼻子测试框架 https nose readthedocs org en latest 识别文件结构中测试脚本下方的模块 我已经设置了演示该问题的最简单的示例 下面我会解释一下 这是包文件结构 init py foo py t
  • Python:记录垃圾收集器

    我有一个 python 应用程序 有一些性能问题 我想将垃圾收集器的事件 特别是何时调用 添加到我的日志中 是否可以 thanks http docs python org library gc html gc set debug http
  • 底图上的子图

    我有一张英国地图和 121 个地点 每个地点有 3 个值 我想绘制 121 个位置中每个位置的三个值的小条形图 目前 这些值绘制为markersize属性 看起来像这样 密集恐惧症情节 https i stack imgur com 5fv
  • 为什么在 Windows 中使用 GetConsoleScreenBufferInfoEx 时控制台窗口会缩小?

    我正在尝试使用 GetConsoleScreenBufferInfoEx 和 SetConsoleScreenBufferInfoEx 设置 Windows 命令行控制台的背景和前景色 我正在 Python 中使用 wintypes 进行此
  • html 解析器 python

    我正在尝试解析一个网站 我正在使用 HTMLParser 模块 问题是我想解析第一个 a href 评论后 但我真的不知道该怎么做 所以我在文档中发现有一个函数叫做handle comment 但我还没有找到如何正确使用它 我有以下内容 i
  • 如何在 ReportLab 段落中插入回车符?

    有没有办法在 ReportLab 的段落中插入回车符 我试图将 n 连接到我的段落字符串 但这不起作用 Title Paragraph Title n Page myStyle 我想要这样做 因为我将名称放入单元格中 并且想要控制单元格中的

随机推荐

  • B端产品设计与实现总结

    Author skatexg Time 2022 03 06 适用范围 B端产品的迭代需求和研发管理总结 end
  • win10关闭电池保护模式_Windows10如何关闭电源保护模式?

    展开全部 首先 在Win10系统桌面上32313133353236313431303231363533e78988e69d8331333365633962能看到笔记本电源标志 当然台式电脑是没有这个图标的 这里的节电模式仅适用于笔记本电脑
  • 设置HTML为桌面壁纸

    我们程序员每天都面对着静态或动态壁纸 但是谁不想拥有一个炫酷的html桌面呢 先看一下效果 下面是几例使用html当桌面进行交互的实际效果 1 桌面可以玩魔方 2 飞机跟随鼠标移动 3 火箭跟随鼠标移动 4 可以通过调节参数的星空 英文自查
  • springboot-rocketmq日志rocketmq_client.log问题

    问题描述 springboot配置rocketmq后 会写入日志到rocketmqlogs目录下的rocketmq client log文件中 且日志过于庞大 解决 1 启动类增加代码 System setProperty ClientLo
  • 因果推断dowhy之-ihdp数据集上的案例学习

    0x01 案例背景 IHDP Infant Health and Development Program 就是一个半合成的典型数据集 用于研究 专家是否家访 对 婴儿日后认知测验得分 之间的关系 原数据集是基于随机控制实验进行的 因此可以获
  • matlab 曲线拟合插值问题

    引言 polyfit 和polyval 经常用于多项式拟合和插值取点 但不能乱用 原理 polyfit根据一些列的点去拟合成一个多项式 多项式的阶次可以设定 假设对于某一小段数据 如图 现在想根据当前点的变化趋势拟合多项式并插值 使用pol
  • 源码漏洞思路笔记

    根据文件名称判断内容 部分文件没有固定的名称和位置 取决于编写网站人员 以下是一般情况 admin 后台路径 data 处理数据 install 安装 menber 会员中心 temple 模板文件 bak文件 数据库备份 bak是back
  • SphereEx苗立尧:云原生架构下的Database Mesh研发实践

    嘉宾 苗立尧 2022年7月27日 在由开放原子开源基金会主办的 2022开放原子全球开源峰会 上 SphereEx Mesh实验室负责人 云原生技术专家苗立垚带来了 云原生架构下的Database Mesh的研发实践 的主题演讲 从云原生
  • bean的有效范围和生命周期(scope)

    scope 的取值范围给出了bean的生命周期 存活时间 即scope 取值决定了Tomcat服务器分配给用户的 bean 的有效范围和生命周期 因此需要理解 scope取值的具体意义 下面就JSP动作标记useBean 中scope取值的
  • conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

    conda 无法将 conda 项识别为 cmdlet 函数 脚本文件或可运行程序的名称 请检查名称的拼写 如果包括路径 请确保路径正确 然后再试一次 解决办法 没有添加系统变量 所以系统根本识别不了conda命令 找不到位置 添加以下系统
  • java fop,使用ApacheFOP从Java中的XML生成PDF

    I am trying to generate on the fly PDF reports from Java objects I have not been able to find many examples of this so I
  • Hbase的入门心得:

    Hbase的入门心得 在了解了Hadoop的大家族的核心成员HDFS MapReduce以及资源管理器YARN后 HBase又是一个新颖的技术出现 在超人学院吴超老师的视频里介绍到 HBase Hadoop Database是一个分布式的
  • 图智能在反洗钱方向的应用实践丨Fabarta 技术专栏

    导读 依托于 Fabarta 在金融行业应用图技术解决反洗钱业务领域问题成功经验 将图智能在反洗钱方向的应用实践进行总结并分享 主要包括以下几个方面 全文目录 反洗钱业务业务背景 当前反洗钱的业务流程及痛点 如何应用图智能进行反洗钱分析 案
  • Seaborn 入门

    一 Seanborn Seaborn是基于Matplotlib的Python数据可视化库 对matplotlib进行二次封装而成 它提供了一个高级界面 用于绘制引人入胜且内容丰富的统计图形 只是在Matplotlib上进行了更高级的API封
  • IOS高访新浪微博界面(讲解如何自定义UITableViewCell,处理@#链接 特殊字符)

    在开发过程中 有好多应用都会嵌入新浪微博的界面 今天整理一下代码 首先看界面效果图 Demo下载地址 http download csdn net detail rhljiayou 6760745 思路 首先放一个UITableView 自
  • 解决Failed to start bean ‘documentationPluginsBootstrapper‘; nested exception is java.lang.NullPointer

    目录 1 背景 2 问题原因 3 解决办法 方法一 修改配置 方法二 将swagger切换成springdoc 1 背景 升级springboot版本从2 2到2 6 6后 同时使用swagger3 启动后报错 Failed to star
  • RGB颜色表示

    光的色散 牛顿的光的色散实验让人们了解了白光光是由单色光组成的 当白光通过三棱镜就能产生光的色散 分解后白光是由红 橙 黄 绿 蓝 靛 紫等各种色光组成的 而红 绿 蓝则是光的三原色 RGB解释 RGB色彩模式是工业界的一种颜色标准 是通过
  • .NET的第三方软件问题

    很多时候 NET是我的首选平台 它通用 一致 工具齐全 是的 我们对于C 的创新很兴奋 并且时不时会有很好的技术出现 当前的Blazor或者久远的silverlight 但是 如果一个NB的开发者说 net是给在银行工作的人用的 好吧 他们
  • Java equals方法

    对于Object的 equals方法 他比较的是对象是否为同一个对象 如果继承了Object的equals方法没有重写 那么比较的是对象的地址 而String类的equals方法比较的是内容
  • Python人一定要知道的13个代码片段(超有用,拒绝标题党!)

    Python人一定要知道的13个超有用的代码片段 这些日常片段将优化你的Python编程代码 当你每天使用Python来解决挑战 开发算法和构建应用程序时 你会发现自己在不断地重复一些任务 这就是为什么为通常执行的任务准备一些代码片段是一个
Powered by Hwhale