导读

我喜欢12这个数字,因为有太多的事情与12有关。一年有12个月;古代用12个时辰(地支)表示一天的时间。用一纪表示12年;希腊有12主神;黄道有12宫;撒迦利亚.西琴先生的《地球编年史》中描述的第12个天体(尼比鲁);另外,朋友、爱人、恋人、家人的笔画都是12。

我喜欢12这个数字,因为有太多的事情与12有关。一年有12个月;古代用12个时辰(地支)表示一天的时间。用一纪表示12年;希腊有12主神;黄道有12宫;撒迦利亚.西琴先生的《地球编年史》中描述的第12个天体(尼比鲁);另外,朋友、爱人、恋人、家人的笔画都是12。所以12注定是一个令人难忘的数字,现在我再为12加一种难忘的解释:用12种方法合并Python列表。

其实Python语言合并两个或多个列表的方法非常简单,直接使用加号(+)即可。不过在很多场景下,并不太适合使用"+"。列表中的值由于某些原因是分散开的,或需要去重,或者正处于迭代中,所以本文将为读者展示如果用多达12种方法合并两个或多个列表。

方法1:宇宙第一加号大法这是最简单的合并Python列表的方法,代码如下:

list1 = [1, 2, 3]

list2 = [4, 5, 6]

result = list1 + list2

# [1, 2, 3, 4, 5, 6]

print(result)

这个方法不用多解释,直接加就完了,既然加两个列表可以,加10000个列表当然也可以,或者放到循环里不断累加。

方法2:自动拆箱和装箱的星号大法

从Python 3.5开始,星号(*)就有了特殊的用途,将一个列表拆开,或将多个值组装成元组。如果将星号用作列表元素,并且这个列表元素也是一个列表的话,那么就会直接将列表中的值作为元素插入上一级的列表中,代码如下:

list1 = [1, 2, 3]

list2 = [4, 5, 6]

result = list1 + list2

# [1, 2, 3, 4, 5, 6]

print(result)

PS:双星(**)可以拆装字典,如果将单星和双星作为函数的参数,那么就是装箱,可以将离散的值组装成元组(单星)和字典(双星),代码如下:

import itertools

list1 = [1, 2, 3]

list2 = [4, 5, 6]

# 直接合并

# [1, 2, 3, 4, 5, 6]

result = [item for item in itertools.chain(list1, list2)]

print(result)

# 合并两个列表的同时,每一个列表元素的值加1

# [2, 3, 4, 5, 6, 7]

result = [item + 1 for item in itertools.chain(list1, list2)]

print(result)

方法3:可控合并,舍“迭代”其谁

前面两种合并列表的方式固然比较简单,但问题是,只能做到简单的合并,如果要做更复杂的合并(如在合并的过程中加工特定的列表元素)就无法做到了。所以在这种情况下可以使用迭代的方式单独处理每一个列表元素,我称这种合并方式为可控合并,代码如下:

import itertools

list1 = [1, 2, 3]

list2 = [4, 5, 6]

# 直接合并

# [1, 2, 3, 4, 5, 6]

result = [item for item in itertools.chain(list1, list2)]

print(result)

# 合并两个列表的同时,每一个列表元素的值加1

# [2, 3, 4, 5, 6, 7]

result = [item + 1 for item in itertools.chain(list1, list2)]

print(result)

方法4:强行转换的用处

通过chain类,可以将两个或多个列表变成一个chain对象,然后再将chain对象转换为list对象,代码如下:

from itertools import chain

list1 = [1, 2, 3]

list2 = [4, 5, 6]

result = list(chain(list1, list2))

# [1, 2, 3, 4, 5, 6]

print(result)

chain类构造方法的原型如下:

def __init__(self, *iterables)

显而易见,构造方法的iterables参数使用了单星(*),所以可以接收任意多个列表参数,例如,chain(list1, list2, list3,list4,list5)是合法的,因此,本方法可以合并任意多个列表。

方法5:我不需要重复的值

有一种特殊的合并列表方式,就是去重,也就是说,如果合并的两个或多个列表中有重复的值,那么只保留一个相同的值即可。其实就是将合并后的结果变成集合,因此,可以用集合来解决这个问题,代码如下:

list1 = [1, 2, 3]

list2 = [4, 3, 6]

result = list(set(list1 + list2))

# [1, 2, 3, 4, 6]

print(result)

这种合并列表的方式尽管使用了加号(+),但还使用set,所以应该属于一种新的合并方式,因为这种合并方式满足了特殊的需求:去重。

方法6:生成器大法

前面的几种方式都是使用了Python中的现成机制,现在来点复杂的:自定义转换函数。

这种合并列表的方式涉及到如下几种技术:

1. 自定义Python函数

2. 单星(*)作为函数参数

3. Python生成器(Generator)

4. 类型转换实现

代码如下:

list1 = [1, 2, 3]

list2 = [4, 5, 6]

list3 = [7, 8, 9]

list4 = [10, 11, 12]

list5 = ["hello", 20.1, True]

# 合并函数,也是一个生成器

def merge(*iters):

for it in iters:

yield from it

result = list(merge(list1, list2, 'abcd', [20, 21, 22],list3,list4,list5))

# [1, 2, 3, 4, 5, 6, 'a', 'b', 'c', 'd', 20, 21, 22, 7, 8, 9, 10, 11, 12, 'hello', 20.1, True]

print(result)

这段代码的merge是一个生成器形式的合并函数,而且使用了单星(*)作为参数类型,所以可以传入任意多个列表。本例合并了7个列表。其中'abcd'是一个字符串形式的列表,每一个列表元素是单个字符。

方法7:又看到for in表达式了

Python简直将for做到了极致,提供了for in表达式。要注意,这是表达式,不是语句。所以可以用在其他表达式中,例如,用for in表达式生成一个列表,代码如下:

list1 = [1, 2, 3]

list2 = [4, 5, 6]

# 如果是字母,会输出对应的ASCII

result = [ord(item) if str(item).isalpha() else item for item in (list1 + list2 + list('abcd') + [20, 21, 22])]

# [1, 2, 3, 4, 5, 6, 97, 98, 99, 100, 20, 21, 22]

print(result)

这种方式适合于复制一个新的列表,而且可以在合并的过程中修改特定的列表值。

方法8:自身也可以被修改

在合并列表时,如果希望一个列表本身被修改,那么可以用这种方法。例如,合并A和B两个列表后,A本身变成了最终的修改结果,也就是说,将B追加到A的后面。实现代码如下:

list1 = [1, 2, 3]

list2 = [4, 5, 6]

result = []

result.extend(list1)

result.extend(list2)

# [1, 2, 3, 4, 5, 6]

print(result)

# [1, 2, 3, 4, 5, 6]

list1.extend(list2)

print(list1)

如果希望不修改参与合并的列表,那么可以定义一个空的列表。

方法9:Python函数库是个好东西,到处都是宝藏

Python有一个非常庞大的函数库,其中不乏用于合并列表的函数,其中operator模块中的add函数就是其中之一,其实add内部使用了加号(+)合并列表,不过这也应该算是一种方法,因为以后add函数可能会使用其他的方式合并列表。代码如下:

import operator

list1 = [1, 2, 3]

list2 = [4, 5, 6]

result = operator.add(list1, list2)

# [1, 2, 3, 4, 5, 6]

print(result)

方法10:远在天边,近在眼前

前面介绍了一堆用于合并列表的API,其实列表类(list)本身就有一个__add__方法,用于合并两个列表,代码如下:

list1 = [1,2,3]

list2 = [4,5,6]

result = list.__add__(list1, list2)

# [1, 2, 3, 4, 5, 6]

print(result)

方法11:传统方式

来个最传统的方式介绍了这么多合并列表的方式,其实最传统的还是一个元素一个元素添加,也就是列表的append方法。那么可能很多同学要问,有这么多好的方式,为啥要一个元素一个元素添加呢?岂不是影响效率?其实这也要看情况。例如,在一些场景,列表的值已经被拆开了(为了处理其他的业务),那么就顺道使用append方法挨个添加了,反正已经被拆开了,不加白不加。

实现代码如下:

list1 = [1,2,3]

list2 = [4,5,6]

result = []

for elem in list1:

result.append(elem)

for elem in list2:

result.append(elem)

# [1, 2, 3, 4, 5, 6]

print(result)

方法12:合并方式不够,外援来凑

其实Python中合并列表的方式也就这么多,好像只有11种,前面都说了,有12种,为了凑够12种,这里请了一个外援,这就是NumPy,这个库主要用于科学计算,对数据的处理比较强大,用NumPy合并Python列表的代码如下:

import numpy

list1 = [1,2,3]

list2 = [4,5,6]

result = numpy.concatenate([list1,list2]).tolist()

print(result)

由于numpy.concatenate函数返回了numpy.ndarray类型,所以要得到Python列表对象,还需要使用tolist方法进行转换。NumPy是第三方库,所以需要使用下面的命令进行安装。

pip install numpy

linux列表中添加多个元素,这12种方法轻松合并Python中的列表相关推荐

  1. 这12种方法轻松合并Python中的列表

    我喜欢12这个数字,因为有太多的事情与12有关.一年有12个月;古代用12个时辰(地支)表示一天的时间.用一纪表示12年;希腊有12主神;黄道有12宫;撒迦利亚.西琴先生的<地球编年史>中 ...

  2. python list删除元素_python中List添加、删除元素的几种方法

    原博文 2015-06-21 18:51 − 一.python中List添加元素的几种方法 List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持着初始时的定义的顺序(除非 ...

  3. linux如何把用户加组内,在Linux中将用户添加到特定组的四种方法

    在Linux中将用户添加到特定组的四种方法 Linux组是用于管理Linux中用户帐户的组织单位. 对于Linux系统中的每个用户和组,它都有唯一的数字标识号. 它称为用户ID(UID)和组ID(GI ...

  4. js 中添加php数组元素,JS数组添加元素方法总结

    本篇文章介绍了如何向JS数组中添加新的元素,分别使用不同的几种方法去给JS数组添加元素,数组在JS中是很常用的数据类型之一,而对数组进行操作这是我们必会的基础之一. 下面我们来看一下有哪些方法可以对J ...

  5. python语言中的多行注释符是_有没有一种方法可以在Python中创建多行注释? - python...

    我最近开始研究Python,但是找不到如何实现多行注释.大多数语言都有块注释符号,例如 /* */ 我在Python中尝试过此方法,但它引发了错误,因此这可能不是正确的方法. Python实际上是否具 ...

  6. java中wmi的username_有没有一种方法可以在Java中使用WMI类

    小编典典 JavaScript和Java不是一回事. JavaScript Windows脚本宿主(WSH)下提供了JavaScript.有了它,访问WMI相当容易: var loc = new Ac ...

  7. php 从数组里删除元素,PHP从数组中删除元素的四种方法实例

    PHP从数组中删除元素的四种方法实例 一.总结 一句话总结:unset(),array_splice(),array_diff(),array_diff_key() 二.PHP从数组中删除元素的四种方 ...

  8. 遍历List移除元素的若干种方法

    众所周知,List在for.while正常遍历过程中,如果remove元素,容易出现ConcurrentModificationException 异常,根本原因的话,之前ArrayList源码分析文 ...

  9. jQuery中添加与删除元素

    我们可以使用jQuery方便的添加或删除元素. 1.使用jQuery生成新元素,生成新元素的方法,比如,我要生成一个有序列表的标签,只需要: var ol = $('<ol></ol ...

最新文章

  1. 巧用CSS的Light滤镜
  2. Linux 终端显示 Git 当前所在分支
  3. 某项目要调用现有的100多个DLL 一 开始
  4. 在Winform程序中设置管理员权限及为用户组添加写入权限
  5. Codeforces Round #112 (Div. 2) E. Compatible Numbers sosdp
  6. Linux内存管理之红黑树(五)
  7. 字符串:2.BF算法(普通模式匹配算法)
  8. Hadoop HIVE 窗口函数
  9. SharePoint 2010 使用代码创建视图查询条件
  10. 传递json_开发技巧分享—JSON 数据格式及函数讲解
  11. 记录甘肃机顶盒MG101_U2破解之路的辛酸历程
  12. ARM64体系结构编程与实践:基础知识
  13. 雨林木风win7系统下载
  14. linux系统安装java环境_linux系统java环境配置
  15. 程序员年薪百万,原来是吃到了这样的红利!
  16. 计算机专业人才选拔专业要求,计算机专业创新人才培养模式研究
  17. harmonyOS hdc配置以及自动签名
  18. 基于DINet的虚拟数字人
  19. 用Python制作动态饼图
  20. 重生之我是赏金猎人(九)-从本无法触发的xss到梦幻联动挖掘多个致命接口下的XSS触发点

热门文章

  1. Discrete Opinion Tree Induction for Aspect-based Sentiment Analysis论文阅读笔记(ACL2022)
  2. MATLAB频域分析,奈氏图、伯德图、对数幅相图绘制
  3. python里制表符是什么_Python制表符是什么
  4. 流量红利消失,如何搭建APP用户增长分发策略
  5. 5-24 藏尾诗 (20分)
  6. 微信商城小程序系统设计与实现
  7. 以jsp实现管理后台界面侧栏
  8. 中睿天下获国家计算机网络应急技术处理协调中心(CNCERT)致信感谢
  9. maxwell 查询历史数据命令
  10. 西部数码服务器不稳定,西部数码弹性云服务器常见问题总结