Python3 list不去重合并

诸神缄默不语-个人CSDN博文目录

本文仅讨论Python3(以Python3.7.2版本来测试实验结果)环境下list(数组)元素不去重合并的问题。
以下给出4种解决方案,按顺序详细描写:1. 直接相加。2. 使用 extend() 函数整体合并。3. 使用 append() 逐一添加元素。4. 使用数组切片的方式。

1. 直接相加

直接相加(+)只能对同类型起作用,即只能用list加list。

range1=list(range(0,3))
print(range1)  #[0, 1, 2]
range2=list(range(8,10))
print(range2)  #[8, 9]
print(range1+range2)  #[0, 1, 2, 8, 9]

在此基础上衍生出的 += 符号的用法,实际上下一节的 extend() 函数类似,因此是可以添加其他可迭代类型对象的:

range1=list(range(0,3))
print(range1)
range2=list(range(8,10))
print(range2)
range1+=range2
print(range1)  #[0, 1, 2, 8, 9]

set1=('factor1','factor2')
range1+=set1
print(range1)  #[0, 1, 2, 8, 9, 'factor1', 'factor2']

原理可以参考python3:序列的 +,+=,和extend的适用场景以及区别_上海 彭彭-CSDN博客一文,大致来说,就是在list使用+=运算符时会调用魔法函数__iadd__,这个函数就是转而直接调用extend()函数来实现该功能。

2. 使用 extend() 函数

list对象的extend()函数以一个可迭代的对象为入参,将入参对象中的元素全部加到list对象中。
入参可以是列表、元组、集合、字典等。如果是字典,将以其键加到list对象中。
函数的详细介绍可参考:Python3 List extend()方法 | 菜鸟教程

range1=list(range(0,3))
print(range1)
range2=list(range(8,10))
print(range2)
range1.extend(range2)
print(range1)  #[0, 1, 2, 8, 9]

dict1={'key1':100,'key2':200}
range1.extend(dict1)
print(range1)  #[0, 1, 2, 8, 9, 'key1', 'key2']

还是参考python3:序列的 +,+=,和extend的适用场景以及区别_上海 彭彭-CSDN博客一文,extend()函数的原理就是迭代入参的每个元素,使用下一节将介绍的append()方法逐一加到原对象末尾。

3. 使用 append() 函数

list对象的 append() 函数是将入参作为一个元素加到原对象末尾。所以如果想要将新对象的全部元素加到原对象中,需要对它的每个元素都应用 append() 函数。

#将入参与原对象合并,即对其每个元素都应用 `append()` 函数,相当于 `extend()` 函数
range1=list(range(0,3))
print(range1)
range2=list(range(8,10))
print(range2)
for v in range2:
    range1.append(v)
print(range1)  #[0, 1, 2, 8, 9]

#将入参作为一个元素加到原对象中
range1.append(range2)
print(range1)  #[0, 1, 2, [8, 9]]

4. 使用数组切片

range1=list(range(0,3))
print(range1)
range2=list(range(8,10))
print(range2)
range1[len(range1):len(range1)+len(range2)]=range2
print(range1)  #[0, 1, 2, 8, 9]

5. 其他正文中没有提及的参考资料

  1. Python3 列表 | 菜鸟教程
  2. Python3中列表list合并的四种方法_python_脚本之家 脚本之家你们知道的,就是一个搬(盗)运(版)网站……但是因为这个网站里面提供的原文网址已经没了,所以我只能引用这个网址了。如果原文网址恢复正常了请告诉我,我去引正版网址。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值