python实用小技之数据结构

数据结构与算法(python)(数据结构) 整理了数据结构的基础内容,包括列表、栈和队列、链表、哈希表和树的相关知识点 阅读详情

本文大多数例子搬自 python cookbook 这里是对学习的一个总结和提炼
ps:python版本为python3


1.解压序列赋值给多个变量

# 有一个包含 N 个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给 N 个变量?
data = ['ACME', 50, 91.1, (2012, 12, 21)]
# 任何的序列(或者是可迭代对象)可以通过一个简单的赋值语句解压并赋值给多个变量
# 变量的数量必须跟序列元素的数量是一样的
name, shares, prices, date = data
print(name, shares, prices, date, sep=" | ", end="\n")
# 如果只需要一部分,可以给个占位变量如
_, sha, pr, _ = data
print(sha,pr,sep=' | ')
 
运行结果:
ACME | 50 | 91.1 | (2012, 12, 21)
50 | 91.1

2.解压可迭代对象赋值给多个变量

# 解压可迭代对象赋值给多个变量
def drop_frist_last(grades):
    frist, *middle, last = grades
    return sum(middle) / len(middle)
print(drop_frist_last([0, 60, 70, 80, 100]))

# 有时候,你想解压一些元素后丢弃它们,可以使用 比如 _ 或者 ign
record = ('ACME', 50, 123.45, (12, 18, 2012))
name,*_,(*_,year) = record
print(name,year)

运行结果:
70.0
ACME 2012

3.保留有限的历史记录


'''
使用 deque(maxlen=N) 构造函数会新建一个固定大小的队列。当新的元素加入并且这个队列已满的时候, 最老的元素会自动被移除掉
'''
def search(lines, pattern, histroy=60):
    previous_lines = deque(maxlen=histroy)
    for line in lines:
        if pattern in line:
            yield line, previous_lines
            previous_lines.append(line)
            print(len(previous_lines))
            for item in previous_lines:
                print(item)

if __name__ == "__main__":
    with open(os.getcwd() + "/Lesson1.py") as f:
        for line, prevlines in search(f, '50', 3):
            print("type prevlines =", type(prevlines))
            for pline in prevlines:
                print('pline = ', pline, end='')
            print("type line =", type(line))
            # print('line = ', line, end='')
            print('-' * 20)
#            

4.怎样从一个集合中获得最大或者最小的 N 个元素列表?

# 当集合是一个列表是
nums = [3, 10, 5, 23, 7, -4, 18, 23, 42, 37, 2]
print(heapq.nlargest(3, nums))
print(heapq.nsmallest(3, nums))
# 如果是更负责的对象时候
mydirt = [
    {'name': 'IBM', 'shares': 100, 'price': 91.1},
    {'name': 'AAPL', 'shares': 50, 'price': 543.22},
    {'name': 'FB', 'shares': 200, 'price': 21.09},
    {'name': 'HPQ', 'shares': 35, 'price': 31.75}]
print(heapq.nlargest(2, mydirt, key=lambda l: l['price']))
print(heapq.nsmallest(2, mydirt, key=lambda l: l['price']))

运行结果
[42, 37, 23]
[-4, 2, 3]
[{'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'IBM', 'shares': 100, 'price': 91.1}]
[{'name': 'FB', 'shares': 200, 'price': 21.09}, {'name': 'HPQ', 'shares': 35, 'price': 31.75}]


ps:堆数据结构最重要的特征是 heap[0] 永远是最小的元素,另外 nlargest,nsmallest 适合查找的元素个数相对比较小的时候,如果你仅仅想查找唯一的最小或最大(N=1)的元素的话,那么使用 min() 和 max() 函数会更快些。 类似的,如果 N 的大小和集合大小接近的时候,通常先排序这个集合然后再使用切片操作会更快点 ( sorted(items)[:N] 或者是 sorted(items)[-N:] )

5.字典排序

'''
你想创建一个字典,并且在迭代或序列化这个字典的时候能够控制元素的顺序。
'''
from collections import OrderedDict

d = OrderedDict()
d['foo'] = 1
d['beer'] = 2
d['bar'] = 4
d['park'] = 3
for key in d:
    print(key, d[key])

执行结果:
foo 1
beer 2
bar 4
park 3


6.字典中的键映射多个值
from collections import defaultdict

df_d = defaultdict(list)
df_d['a'].append(1)
df_d['a'].append(2)
df_d['b'].append(4)
print(df_d)

d2 = defaultdict(set)
pairs = [('a', 1), ('a', 2), ('b', 4)]
for key, value in pairs:
    d2[key].add(value)
print(d2)

运行结果:
defaultdict(<class 'list'>, {'a': [1, 2], 'b': [4]})
defaultdict(<class 'set'>, {'a': {1, 2}, 'b': {4}})

7.字典的运算(求最小值、最大值、排序等)

prices = {
    'ACME': 45.23,
    'AAPL': 612.78,
    'IBM': 205.55,
    'HPQ': 37.20,
    'FB': 10.75
}

# 求最小值
# 方法 1,通过zip 函数创建的是一个只能访问一次的迭代,将键值反过来
print(min(zip(prices.values(), prices.keys())))
# 输出 (10.75, 'FB')

# 方法二 直接取values 获取最小值,不过你就不知道对于的key
print(min(prices.values()))
# 输出 10.75

# 方法三
min_key = min(prices, key=lambda k: prices[k])
print(prices[min_key])
# 输出 FB

# 排序
prices_sorted = sorted(zip(prices.values(), prices.keys()))
print(prices_sorted)
# 输出 [(10.75, 'FB'), (37.2, 'HPQ'), (45.23, 'ACME'), (205.55, 'IBM'), (612.78, 'AAPL')]

Python 40多个为入门新手准备的实用小例子 这允许内部函数修改或访问外部函数的局部变量,而不是在内部函数中创建一个新的局部变量。关键字可以使得代码更加清晰,避免了在内部函数中创建额外的局部变量,从而更好地维护了变量的作用域。关键字时,你告诉Python你将要访问或修改的是在函数外部定义的全局作用域中的变量,而不是在函数内部创建一个新的局部变量。关键字可能会导致代码难以理解和维护,因此建议在适当的场合使用它们,并保持代码的清晰和简洁。python五类参数:位置参数,关键字参数,默认参数,可变位置或关键字参数的使用。这意味着,当你在一个函数中使用。 阅读详情

相关推荐

Python数据结构基础,非常详细,小白适用。

数据结构中有很多树的结构,其中包括二叉树、二叉搜索树、2-3树、红黑树等等。本文中对数据结构进行了总结,不求严格精准,但求简单易懂列表中的每一个元素都是可变的;列表中的元素是有序的,也就是说每一个元素都有一个位置;列表可以容纳 Python 中的任何对象。列表中的元素是可变的,这意味着我们可以在列表中添加、删除和修改元素。1, #整数1.0, #浮点数'a word', #字符串print(1), #函数True, #布尔值\[1,2\], #列表中套列表(1,2), #元组。

python03011的博客 1257

Python从门到精通(三):高级操作-01-迭代

Python从门到精通(三):高级操作-01-迭代

编程是一门实践技术 208

Dify-前端本地运行-单点登录

本文介绍了如何在已部署Dify的系统中实现AI应用跳转及页面定制化改造。通过iframe跳转无法满足甲方需求后,作者对Dify前端源码进行了本地化二次开发,主要步骤包括:1) 按照官方文档搭建本地开发环境;2) 修改.env配置文件连接部署好的后端服务;3) 隐藏侧边栏和头部导航栏;4) 实现单点登录功能,通过URL参数获取用户邮箱自动登录。过程中解决了请求拦截导致的登录校验问题,最终达成仅保留对话框界面并同步用户信息的需求。该方案涉及Next.js框架和React技术的应用,为类似定制化需求提供了参

weixin_43163457的博客 3224

输出匹配特定字符串所在行的前几行的两个方法

比如要输出文件 test.txt 中含有字符串 Welcome所在行 的前5行 1、使用grep cat ./test.txt|grep -B 5 'Welcome' 2、使用python3 from collections import deque def search( lines, pattern, history= 5): previous_lines = deque( maxlen= history) for line in lines: if p...

lepton126的专栏 640

MuJoCo 相机图片怎么拿?视角调整获取物体图片及实时显示(附代码)

在Mujoco的仿真中,对于识别抓取场景来说,如何获得添加的body等物体的实时图像很重要,今天就分享下如何添加相机视角及可视化小方块(举例)的实时图片。复制一个scene.xml为scene_withcamera.xml,在xml中添加camera和小方块如下。设置xml文件中添加的相机body id。需要创建一个离屏渲染器。

darcsdn 2128

Arduino程序设计(十四)舵机控制实验(SG90)

本文介绍SG90舵机控制原理及实验,主要内容有:1、介绍SG90舵机;2、舵机0°~180°来回转动;3、串口控制舵机转动固定角度。(1)舵机是一种位置(角度)伺服的驱动器。舵机只是一种通俗的叫法,其实质是一个伺服马达。在需要角度不断变化并可以保持的控制系统中应用广泛。如遥控机械人、飞机模型等。(2)舵机的转动角度为0~180°,其内部结构包括电机,控制电路和机械结构三部分。电机有三根线引出,分别接VCC、GNG和信号线。

Alice的博客 1万+

Python Cookbook e1.3 yield生成器函数及import

    Python Cookbook中文版Page 5(1.3保存最后N个元素),学到此处遇到几个问题。现记录如下,与大家分享一下学习心得。(p6)1.3.2解决方案example use on a file, 此处有两个问题:1.line 2with open('somefile.txt') as f:  此处'somefile.txt' 必须改成自己文件夹里的.txt文件,不然无法使用。如...

xmnzsy的博客 361

当我们谈论Unidbg时我们在谈什么

文章目录一、前言二、使用Unidbg的工作量是什么三、补环境补的是什么3.1 运行环境缺失3.2 上下文缺失四、Unidbg 不是所有情况下最优的解决方案五、Unidbg在大多数情况下是好的方案六、Unidbg和风控无关七、尾声 一、前言 这是一篇漫谈Unidbg的文章,我对Unidbg的使用和理解都还很浅,日后会更新或修改看法,欢迎大佬指点,也期待同侪讨论。 二、使用Unidbg的工作量是什么 我们常规使用Frida + IDA的动静态分析中,工作可能是这样的 找线索→Frida Hook验证→验证成功继

lilac的博客 5788

python求序列最小值_python实用小技之数据结构

目录本文大多数例子搬自 python cookbook 这里是对学习的一个总结和提炼ps:python版本为python31.解压序列赋值给多个变量# 有一个包含 N 个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给 N 个变量?data = ['ACME', 50, 91.1, (2012, 12, 21)]# 任何的序列(或者是可迭代对象)可以通过一个简单的赋值语句解压并赋值给多个变量...

weixin_39632693的博客 765

5-EP4CE10F17C8-引脚配置

EP4CE10F17C8-引脚配置

weixin_44479192的博客 719

【BlueZ】编译产物详解:可执行文件/库文件/工具的生成路径与用途

BlueZ二次开发编译产物机制解析 摘要:在BlueZ蓝牙协议栈二次开发中,90%的报错源于对编译产物类型和路径的混淆。本文系统剖析BlueZ的三阶段编译机制:1)配置阶段生成Makefile;2)编译阶段在.libs目录下产生临时库和可执行文件(不可直接运行);3)安装阶段将产物部署到系统标准路径。重点解析守护进程、命令行工具、动态库的核心路径差异,并针对五大高频问题(如临时库运行崩溃、动态库不匹配、系统覆盖等)给出解决方案。

byte轻骑兵的技术小窝 1万+

python求集合最大值最小值_【干货】python实用小技之数据结构

目录1.解压序列赋值给多个变量2.解压可迭代对象赋值给多个变量3.保留有限的历史记录4.怎样从一个集合中获得最大或者最小的 N 个元素列表?5.字典排序6.字典中的键映射多个值7.字典的运算(求最小值、最大值、排序等)本文大多数例子搬自 python cookbook 这里是对学习的一个总结和提炼ps:python版本为python31解压序列赋值给多个变量# 有一个包含 N 个元素的元...

weixin_42365234的博客 2994

斑鬣狗优化算法(SHO)详解:从生物原理到代码实战

斑鬣狗优化算法(SHO)是一种新型元启发式优化算法,灵感来源于斑鬣狗的群体狩猎行为。该算法通过模拟斑鬣狗的包围猎物、协同狩猎和攻击猎物等生物行为,将优化问题转化为智能搜索过程。SHO算法包含探索与开发两个阶段,通过数学模型实现群体协作和自适应平衡,具有参数简单、收敛快等优势。文章系统介绍了SHO的生物基础、数学模型、实现方法(包括MATLAB和Python代码)、改进策略以及在函数优化、路径规划等领域的应用案例,最后讨论了算法的优势、局限性和未来研究方向。

qq_42212808的博客 237

python三个数输出最小值_python求序列最小值_python实用小技之数据结构

目录本文大多数例子搬自 python cookbook 这里是对学习的一个总结和提炼ps:python版本为python31.解压序列赋值给多个变量# 有一个包含 N 个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给 N 个变量?data = ['ACME', 50, 91.1, (2012, 12, 21)]# 任何的序列(或者是可迭代对象)可以通过一个简单的赋值语句解压并赋值给多个变量...

weixin_32285357的博客 4301

AutoJs调用DeepSeek大模型接口实战教程 AutoJs接入DeepSeek、 DeepSeek API调用 、 手机脚本接入大模型

通过这篇文章,我们用 AutoJs 成功接入了 DeepSeek Chat API。使用发送请求在 Header 里正确携带 API Key从里拿到最终返回结果这样一来,你就可以在 AutoJs 里实现一个智能助手脚本,甚至做更复杂的 AI 自动化工具。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 467

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python 数据结构篇

python中的数据结构实现:数组、链表(单链表、双向链表、双向循环链表)、队列(FIFO、LIFO/栈、优先级队列、双端队列)、树(二叉树、堆、树、森林)、图

qq_62047219的博客 2万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Python 数据结构和算法实用指南(一)

原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 数据结构和算法是信息技术和计算机科学工程学习中最重要的核心学科之一。本书旨在提供数据结构和算法的深入知识,以及编程实现经验。它专为初学者和中级水平的研究 Python 编程的研究生和本科生设计,并通过示例解释复杂的算法。 在这本书中,您将学习基本的 Python 数据结构和最常见的算法。本书将提供 Python 的基本知识,并让

龙哥盟 999

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

python数据结构与算法总结

python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章: 《数据结构和算法对python意味着什么?》 《顺序表数据结构在python中的应用》 《python实现单向链表数据结构及其基本方法》 《python实现单向循环链表数据结构及其方法》 《python实现双向链表基本结构及其基本方法》 《python实现双向循环链表基本结构及其基本方法》 《py...

python之战 2万+

Python的数据结构

一. 认识Python数据结构 Python有4个内建的数据结构,它们可以统称为容器(container),因为它们实际上是一些“东西”组合而成的结构,而这些“东西”,可以是数字、字符甚至列表,或是它们的组合。 Python中的绝大部分数据结构可以被最终分解为三种类型:集合(Set),序列(Sequence),映射(Mapping)。这表明了数据存储时所需的基本单位,其重要性如同欧式几何公理之于...

zt_96123的博客 1万+

Python算法中常用的数据结构

数据结构可以帮助我们用于存储和操作复杂的数据。在Python中,数据结构有以下五类: ✨列表(list):可变的、有序元素序列。 ✨元组(tuple):不可变的、有序元素序列。 ✨集合(set):元素互斥的、可变的、无序元素序列。 ✨字典(dictionary):无序的、键值对序列。 ✨数据帧(DataFrame):存储二维数据的二维结构。

m0_73375411的博客 4339

python实用小代码

栈的实现 #!/usr/bin/env python #coding=utf-8 #python version 2.7.4 class stack: def __init__(self,list=None): self.contain = list self.msize=100; self.top = 0; def ge

2993

python | jsonschema,一个实用的 验证 JSON 数据结构 Python 库!

在现代软件开发中,JSON 已经成为最常见的数据交换格式之一,无论是在 API 设计还是数据存储中,JSON 都发挥着重要的作用。然而,随着数据结构变得复杂,确保 JSON 数据的有效性和一致性变得至关重要。jsonschema 是一个用于验证 JSON 数据结构的 Python 库,它基于 JSON Schema 标准,能够有效地定义和验证 JSON 数据的结构,从而帮助开发者避免错误并提升数据处理的可靠性。

csdn_xmj的博客 1466

数据结构(Python)

二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树二叉搜索树是一颗二叉树, 可以为空;如果不为空,满足以下性质:非空左子树的所有键值小于其根结点的键值。非空右子树的所有键值大于其根结点的键值。左、右子树本身也都是二叉搜索树。下面哪些是二叉搜索树, 哪些不是?二叉搜索树的特点:二叉搜索树的特点就是相对较小的值总是保存在左结点上, 相对较大的值总是保存在右结点上.那么利用这个特点, 我们可以做什么事情呢?

m0_68625595的博客 1893
上一篇: python_selenium元素定位_xpath(2)
下一篇: Java读取properties配置文件工具包
Meryoufdd
博客等级 码龄5年 13粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值