分析Python列表的魔幻12法

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

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


  1. list1 = [1, 2, 3] 
  2. list2 = [4, 5, 6] 
  3.  
  4. result = list1 + list2 
  5. # [1, 2, 3, 4, 5, 6] 
  6. print(result) 

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

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

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


  1. list1 = [1, 2, 3] 
  2. list2 = [4, 5, 6] 
  3.  
  4. result = list1 + list2 
  5. # [1, 2, 3, 4, 5, 6] 
  6. print(result) 

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


  1. import itertools 
  2. list1 = [1, 2, 3] 
  3. list2 = [4, 5, 6] 
  4. # 直接合并 
  5. # [1, 2, 3, 4, 5, 6] 
  6. result = [item for item in itertools.chain(list1, list2)] 
  7. print(result) 
  8. # 合并两个列表的同时,每一个列表元素的值加1 
  9. # [2, 3, 4, 5, 6, 7] 
  10. result = [item + 1 for item in itertools.chain(list1, list2)] 
  11. print(result) 

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

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


  1. import itertools 
  2. list1 = [1, 2, 3] 
  3. list2 = [4, 5, 6] 
  4. # 直接合并 
  5. # [1, 2, 3, 4, 5, 6] 
  6. result = [item for item in itertools.chain(list1, list2)] 
  7. print(result) 
  8. # 合并两个列表的同时,每一个列表元素的值加1 
  9. # [2, 3, 4, 5, 6, 7] 
  10. result = [item + 1 for item in itertools.chain(list1, list2)] 
  11. print(result) 

方法4:强行转换的用处

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


  1. from itertools import chain 
  2. list1 = [1, 2, 3] 
  3. list2 = [4, 5, 6] 
  4. result = list(chain(list1, list2)) 
  5. # [1, 2, 3, 4, 5, 6] 
  6. print(result) 

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


  1. def __init__(self, *iterables) 

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

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

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


  1. list1 = [1, 2, 3] 
  2. list2 = [4, 3, 6] 
  3. result = list(set(list1 + list2)) 
  4. # [1, 2, 3, 4, 6] 
  5. print(result) 
【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章