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

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

3天内不再提示

python如何连接列表

python爬虫知识分享 来源:python爬虫知识分享 作者:python爬虫知识分享 2022-04-07 17:04 次阅读

1、最直观的相加

使用 + 对多个列表进行相加,你应该懂,不多说了。

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>>
>>> list01 + list02 + list03
[1, 2, 3, 4, 5, 6, 7, 8, 9]

2、借助 itertools

itertools 在 Python 里有一个非常强大的内置模块,它专门用于操作可迭代对象。

在前面的文章中也介绍过,使用 itertools.chain() 函数先将可迭代对象(在这里指的是列表)串联起来,组成一个更大的可迭代对象。

最后你再利用 list 将其转化为 列表。

>>> from itertools import chain
>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>>
>>> list(chain(list01, list02, list03))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

3、使用 * 解包

使用 * 可以解包列表,解包后再合并。

示例如下:

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>>
>>> [*list01, *list02]
[1, 2, 3, 4, 5, 6]

4、使用 extend

在字典中,使用 update 可实现原地更新,而在列表中,使用 extend 可实现列表的自我扩展。

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>>
>>> list01.extend(list02)
>>> list01
[1, 2, 3, 4, 5, 6]

5、使用列表推导式

Python 里对于生成列表、集合、字典,有一套非常 Pythonnic 的写法。

那就是列表解析式,集合解析式和字典解析式,通常是 Python 发烧友的最爱,那么今天的主题:列表合并,列表推导式还能否胜任呢?

当然可以,具体示例代码如下:

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>>
>>> [x for l in (list01, list02, list03) for x in l]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

6、使用 heapq

heapq 是 Python 的一个标准模块,它提供了堆排序算法的实现。

该模块里有一个 merge 方法,可以用于合并多个列表,如下所示

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>>
>>> from heapq import merge
>>>
>>> list(merge(list01, list02, list03))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

要注意的是,heapq.merge 除了合并多个列表外,它还会将合并后的最终的列表进行排序。

>>> list01 = [2,5,3]
>>> list02 = [1,4,6]
>>> list03 = [7,9,8]
>>>
>>> from heapq import merge
>>>
>>> list(merge(list01, list02, list03))
[1, 2, 4, 5, 3, 6, 7, 9, 8]

它的效果等价于下面这行代码:

sorted(itertools.chain(*iterables))

如果你希望得到一个始终有序的列表,那请第一时间想到 heapq.merge,因为它采用堆排序,效率非常高。但若你不希望得到一个排过序的列表,就不要使用它了。

7、借助魔法方法

有一个魔法方法叫 __add__,当我们使用第一种方法 list01 + list02 的时候,内部实际上是作用在 __add__ 这个魔法方法上的。

所以以下两种方法其实是等价的

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>>
>>> list01 + list02
[1, 2, 3, 4, 5, 6]
>>>
>>>
>>> list01.__add__(list02)
[1, 2, 3, 4, 5, 6]

借用这个魔法特性,我们可以配合 reduce 这个方法来对多个列表进行合并,示例代码如下

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>>
>>> from functools import reduce
>>> reduce(list.__add__, (list01, list02, list03))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

8. 使用 yield from

在 yield from 后可接一个可迭代对象,用于迭代并返回其中的每一个元素。

因此,我们可以像下面这样自定义一个合并列表的工具函数。

>>> list01 = [1,2,3]
>>> list02 = [4,5,6]
>>> list03 = [7,8,9]
>>>
>>> def merge(*lists):
...   for l in lists:
...     yield from l
...
>>> list(merge(list01, list02, list03))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

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

    关注

    7

    文章

    2740

    浏览量

    47829
  • 函数
    +关注

    关注

    3

    文章

    4350

    浏览量

    63052
  • python
    +关注

    关注

    56

    文章

    4811

    浏览量

    85103
收藏 人收藏

    评论

    相关推荐

    Python Connector for InterBase连接解决方案

    适用于 InterBase 的 Python 连接Python Connector for InterBase 是一种可靠的连接解决方案,用于从
    的头像 发表于 01-22 14:34 142次阅读

    使用Python实现xgboost教程

    使用Python实现XGBoost模型通常涉及以下几个步骤:数据准备、模型训练、模型评估和模型预测。以下是一个详细的教程,指导你如何在Python中使用XGBoost。 1. 安装XGBoost
    的头像 发表于 01-19 11:21 465次阅读

    适用于MySQL和MariaDB的Python连接器:可靠的MySQL数据连接器和数据库

    适用于 MySQL 和 MariaDB 的 Python 连接Python Connector for MySQL 是一种可靠的连接解决方案,用于从
    的头像 发表于 01-17 12:18 150次阅读
    适用于MySQL和MariaDB的<b class='flag-5'>Python</b><b class='flag-5'>连接</b>器:可靠的MySQL数据<b class='flag-5'>连接</b>器和数据库

    适用于Oracle的Python连接器:可访问托管以及非托管的数据库

    适用于 Oracle 的 Python 连接器 适用于 Oracle 的 Python 连接器是一种可靠的连接解决方案,用于从
    的头像 发表于 01-14 10:30 133次阅读

    使用Python进行Ping测试

    在网络工程中,Ping测试是一种常用的网络诊断工具,用于检查网络连接的可达性和响应时间。Ping测试通过向目标主机发送ICMP(Internet Control Message Protocol
    的头像 发表于 08-12 17:56 625次阅读
    使用<b class='flag-5'>Python</b>进行Ping测试

    使用Python批量连接华为网络设备

    随着网络规模的扩大和设备数量的增加,手动配置和管理每台网络设备变得越来越不现实。因此,自动化工具和脚本变得尤为重要。Python语言以其简洁性和强大的第三方库支持,成为了网络自动化领域的首选。本篇文章将详细介绍如何使用Python批量
    的头像 发表于 08-12 17:48 567次阅读

    pytorch和python的关系是什么

    在当今的人工智能领域,Python已经成为了最受欢迎的编程语言之一。Python的易学易用、丰富的库和框架以及强大的社区支持,使其成为了数据科学、机器学习和深度学习等领域的首选语言。而在深度学习领域
    的头像 发表于 08-01 15:27 2495次阅读

    opencv-python和opencv一样吗

    不一样。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了大量的图像和视频处理功能。OpenCV-Python
    的头像 发表于 07-16 10:38 1470次阅读

    用pycharm进行python爬虫的步骤

    以下是使用PyCharm进行Python爬虫的步骤: 安装PyCharm和Python 首先,您需要安装PyCharm和Python。PyCharm是一个流行的Python集成开发环境
    的头像 发表于 07-11 10:11 981次阅读

    RTOS中调用接口扫描到的WIFI列表和AT模式下扫描到的WIFI列表不同是怎么回事?

    数据会卡住,但是烧录进AT指令的bin文件,通过AT指令却能完整的扫描到周边的WIFI列表,即使连接在1信道,也能扫描到13信道的WIFI,并且连接和发送/接收数据都很稳定。很奇怪的现象。
    发表于 07-11 06:45

    如何使用Python进行神经网络编程

    神经网络简介 神经网络是一种受人脑启发的机器学习模型,由大量的节点(或称为“神经元”)组成,这些节点在网络中相互连接。每个节点可以接收输入,对输入进行加权求和,然后通过一个激活函数产生输出
    的头像 发表于 07-02 09:58 470次阅读

    鸿蒙ArkUI开发:常用布局【 创建列表(List)】

    列表容器是为了高效处理长列表的容器,能支持横向、竖向滚动,数据分组,分组头悬浮等功能
    的头像 发表于 05-15 15:30 890次阅读
    鸿蒙ArkUI开发:常用布局【 创建<b class='flag-5'>列表</b>(List)】

    HarmonyOS开发案例:【待办列表

    使用ArkTS声明式语法和基础组件,实现简易待办列表。效果为点击某一事项,替换标签图片、虚化文字。
    的头像 发表于 05-06 15:22 1174次阅读
    HarmonyOS开发案例:【待办<b class='flag-5'>列表</b>】

    鸿蒙OS开发实例:【demo选择列表限定数量】

    HarmonyOs-demo-选择列表限定数量
    的头像 发表于 03-26 22:24 589次阅读
    鸿蒙OS开发实例:【demo选择<b class='flag-5'>列表</b>限定数量】

    基于Python的地图绘制教程

    本文将介绍通过Python绘制地形图的方法,所需第三方Python相关模块包括 rasterio、geopandas、cartopy 等,可通过 pip 等方式安装。
    的头像 发表于 02-26 09:53 1335次阅读
    基于<b class='flag-5'>Python</b>的地图绘制教程