0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

六个Python进阶用法介绍

python爬虫知识分享 来源:python爬虫知识分享 作者:python爬虫知识分享 2022-03-28 16:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1 列表生成式和生成器

from numpy import random
a = random.random(10000)

lst = []
for i in a:
    lst.append(i * i)  # 不推荐做法

lst = [i * i for i in a]  # 使用列表生成式

gen = (i * i for i in a)  # 生成器更节省内存

2 字典推导式创建子集

a = {'apple': 5.6, 'orange': 4.7, 'banana': 2.8}
da = {key: value for key, value in a.items() if value > 4.0}
print(da)  # {'apple': 5.6, 'orange': 4.7}

3 Key使用itemgetter多字段排序

from operator import itemgetter
a = [{'date': '2019-12-15', 'weather': 'cloud'},
     {'date': '2019-12-13', 'weather': 'sunny'},
     {'date': '2019-12-14', 'weather': 'cloud'}]

a.sort(key=itemgetter('weather', 'date'))
print(a)
# [{'date': '2019-12-14', 'weather': 'cloud'}, {'date': '2019-12-15', 'weather': 'cloud'}, {'date': '2019-12-13', 'weather': 'sunny'}]

4 Key使用itemgetter分组

from operator import itemgetter
from itertools import groupby
a.sort(key=itemgetter('weather', 'date'))  # 必须先排序再分组
for k, items in groupby(a, key=itemgetter('weather')):
    print(k)
    for i in items:
        print(i)

5 sum类聚合函数与生成器

Python中的聚合类函数sum,min,max第一个参数是iterable类型,一般使用方法如下:

a = [4,2,5,1]
sum([i+1for i in a]) # 16

使用列表生成式[i+1 for i in a]创建一个长度与a一样的临时列表,这步完成后,再做sum聚合。

试想如果你的数组a长度是百万级,再创建一个这样的临时列表就很不划算,最好是一边算一边聚合,稍改动为如下:

a = [4,2,5,1]
sum(i+1for i in a) # 16

此时i+1 for i in a(i+1 for i in a)的简写,得到一个生成器(generator)对象,如下所示:

In [8]:(i+1for i in a)
OUT [8]: at 0x000002AC7FFA8CF0>

生成器每迭代一步吐出(yield)一个元素并计算和聚合后,进入下一次迭代,直到终点。

6 ChainMap逻辑上合并多个字典

dic1 = {'x': 1, 'y': 2 }
dic2 = {'y': 3, 'z': 4 }
merged = {**dic1, **dic2} # {'x': 1, 'y': 3, 'z': 4}

修改merged['x']=10,dic1中的x不变

ChainMap只在逻辑上合并,在内部创建了一个容纳这些字典的列表。

from collections import ChainMap
merged = ChainMap(dic1,dic2)
print(merged)
# ChainMap({'x': 1, 'y': 2}, {'y': 3, 'z': 4})

使用ChainMap合并字典,修改merged['x']=10,dic1中的x

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    9

    文章

    3173

    浏览量

    76121
  • 生成器
    +关注

    关注

    7

    文章

    322

    浏览量

    22509
  • python
    +关注

    关注

    57

    文章

    4858

    浏览量

    89600
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ETAS INCA软件的五实用进阶功能

    在上一篇文章中我们介绍了INCA软件如何赋能高效的ECU开发及新能源挑战,本篇内容将继续深入探讨INCA的五实用进阶功能。
    的头像 发表于 12-08 16:42 1033次阅读
    ETAS INCA软件的五<b class='flag-5'>个</b>实用<b class='flag-5'>进阶</b>功能

    C语言的printf基本用法介绍

    小数。f 是 float 的简写。 除了这些,printf 支持更加复杂和优美的输出格式,考虑到读者的基础暂时不够,我们将在《C语言数据输出大汇总以及轻量进阶》一节中展开讲解。 我们把代码补充完整
    发表于 11-12 07:04

    ‌CDC204 3.3V路反相器/时钟驱动器技术文档总结

    CDC204 包含六个独立的逆变器。该器件执行布尔函数 Y = A\。它专为开关输出之间需要低偏斜的应用而设计。 CDC204 的特点是从 T ~一~ = 25°C 至 70°C。
    的头像 发表于 09-24 10:50 1955次阅读
    ‌CDC204 3.3V<b class='flag-5'>六</b>路反相器/时钟驱动器技术文档总结

    Linux基础命令的进阶用法

    凌晨2点,正在熟睡的你被电话惊醒:"线上服务响应超时,用户大面积投诉!" 你匆忙打开电脑,SSH 登录服务器,面对满屏的进程和日志,脑子一片空白——从哪里开始排查?用什么命令?怎么快速定位问题?
    的头像 发表于 09-02 16:33 576次阅读

    termux调试python猜数字游戏

    用termux做一猜数字游戏 下面是在Termux中创建猜数字游戏的步骤及完整实现方案,结合Python实现(最适配Termux环境): ? 一、环境准备(Termux基础配置) 1.
    发表于 08-29 17:15

    SN74AHCT04路反相器技术解析与应用指南

    Texas Instruments SN74AHCT04路逆变器包含六个独立的逆变器并执行布尔函数Y = A。Texas Instruments SN74AHCT04具有TTL输入电平,允许从3.3V向上转换到5V。
    的头像 发表于 08-15 10:28 1541次阅读
    SN74AHCT04<b class='flag-5'>六</b>路反相器技术解析与应用指南

    RK3568驱动指南|驱动基础进阶篇-进阶7 向系统中添加一系统调用

    RK3568驱动指南|驱动基础进阶篇-进阶7 向系统中添加一系统调用
    的头像 发表于 05-21 14:15 558次阅读
    RK3568驱动指南|驱动基础<b class='flag-5'>进阶</b>篇-<b class='flag-5'>进阶</b>7 向系统中添加一<b class='flag-5'>个</b>系统调用

    Altium Designer PCB设计高级进阶

    对PCB设计的高级进阶的内容进行相关的介绍 纯分享贴,有需要可以直接下载附件获取完整资料! (如果内容有帮助可以关注、点赞、评论支持一下哦~)
    发表于 04-27 16:40

    python入门圣经-高清电子书(建议下载)

    和Pygal 等强大的Python 库和工具介绍,以及列表、字典、if 语句、类、文件与异常、代码测试等内容; 第二部分将理论付诸实践,讲解如何开发三项目,包括简单的Python
    发表于 04-10 16:53

    关于功率模块冷却的六个常见问题

    的寿命并使其发挥最佳性能。本文章将概述在为应用设计功率模块时可能出现的关于功率模块冷却的六个常见问题。1.器件温度是否均匀?功率晶体管和二极管等功率元器件会产生局部热
    的头像 发表于 04-08 11:42 569次阅读
    关于功率模块冷却的<b class='flag-5'>六个</b>常见问题

    函数指针的六个常见应用场景

    函数指针在嵌入式开发中有着广泛的应用,它让代码更加灵活,减少冗余,提高可扩展性。很多时候,我们需要根据不同的情况动态调用不同的函数,而函数指针正是实现这一需求的重要工具。本文将介绍六个常见的函数指针
    的头像 发表于 04-07 11:58 1139次阅读
    函数指针的<b class='flag-5'>六个</b>常见应用场景

    零基础入门:如何在树莓派上编写和运行Python程序?

    在这篇文章中,我将为你简要介绍Python程序是什么、Python程序可以用来做什么,以及如何在RaspberryPi上编写和运行一简单的Pyth
    的头像 发表于 03-25 09:27 1548次阅读
    零基础入门:如何在树莓派上编写和运行<b class='flag-5'>Python</b>程序?

    LM5175的四开关管升降压开关电源,导出的原理图中有六个开关管,为什么M3、M4各自需要并联一一样的开关管呢?

    就是我利用TI上导出关于LM5175芯片的四开关管升降压开关电源,导出的原理图中有六个开关管,我想知道为什么M3、M4各自需要并联一一样的开关管呢?
    发表于 02-26 08:24

    AFE5801 fclkin只能输入只列出了65、50、40、30、20、10MHz这六个值吗?

    在datasheet的第8页的 Output Interface Timing表格中,fclkin(输入采样时钟)只列出了65、50、40、30、20、10MHz这六个值。这意味着fclkin只能输入这六个值吗?如果我希望采样时钟是18M,可以吗?
    发表于 02-11 07:29

    ADS805E的转换结果要延后六个采样周期才输出吗?

    这时序图是说明ADS805E这款芯片的转换结果要延后六个采样周期才输出吗?即图中的Analog In中的N点对应的转换后的Data Out中的N 吗?还是说,这时序图是说明此芯片在上电后的前六个
    发表于 01-23 07:50