Python实现列表拼接和去重的三种方式

作者:一撸程猿 时间:2021-05-02 23:43:54 

目录
  • 列表拼接三种方式

    • 方式一:简简单单的“+”

    • 方法二:切片赋值

    • 方式三:列表自带的extend()

  • 列表去重的三种方式

    • 利用集合set的特性

    • 利用字典key的不可重复属性

    • 利用index()获取到的是第一次出现的索引

列表拼接三种方式

列表拼接主要有以下三种方式:

  • 最简单的使用“+”;

  • 使用切片赋值的方法;

  • 使用列表自带的extend方法

方式一:简简单单的“+”


>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> id(list1)
4408465160
>>> id(list2)
4408325512
>>> list1 = list1 + list2
>>> list1
[1, 2, 3, 4, 5, 6]
>>> id(list1)
4408504776

此方法易于理解,但你会发现其实list1已经不是原来那个list1了,list1的id值已经发生改变。

方法二:切片赋值

在这里,我们发现使用切片赋值的拼接就地执行,即它会修改原来的列表,但易读性不高


>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> id(list1)
4408465160
>>> id(list2)
4408504776
>>> list1[len(list1):len(list1)] = list2
>>> list1
[1, 2, 3, 4, 5, 6]
>>> id(list1)
4408465160

方式三:列表自带的extend()


>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> id(list1)
4408325512
>>> list1.extend(list2)
>>> list1
[1, 2, 3, 4, 5, 6]
>>> id(list1)
4408325512

这里,你会发现列表自带的extend()也是就地执行,即它会修改原来的列表,直接在原来的列表后面拼接新列表。
综合上面三种方式,第一种的使用“+”拼接需要易于理解,但却不是就地执行,而是新开辟一块空间来存放新列表;第二种比较难于理解;还是Python列表自带的extend()拼接列表函数较为友好。

列表去重的三种方式

例如有以下一个列表:需要你进行去重,你能想到哪些方法呢?


num_list = [1,8,9,1,2,3,4,6,5,7,10,5,6,8,3,4]

利用集合set的特性

第一种方法(大家第一个都会想到的吧):利用集合set的特性

集合set特性:元素不能重复


>>> num_list = [1,8,9,1,2,3,4,6,5,7,10,5,6,8,3,4]
>>> new_list = list(set(num_list))
>>> new_list
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

利用字典key的不可重复属性

第二张方法(与集合拥有相同特性的):那么就是字典的键啦
先介绍一下函数dict.fromkeys(序列,设置键对应的值),返回一个由序列的元素作为键,设置的值作为所有键的值的字典,值省略的话所有键的值将默认为None;如果设置了值的话所有的键将会赋予同一个值,看例子:


>>> dict1 = dict.fromkeys([1,2,3,4])
>>> dict1
{1: None, 2: None, 3: None, 4: None}
>>> dict1 = dict.fromkeys([1,2,3,4],5)
>>> dict1
{1: 5, 2: 5, 3: 5, 4: 5}

那么正式使用字典键的特性进行去重,看例子:


>>> num_list = [1,8,9,1,2,3,4,6,5,7,10,5,6,8,3,4]
>>> num_dict = dict.fromkeys(num_list)
>>> num_dict
{1: None, 8: None, 9: None, 2: None, 3: None, 4: None, 6: None, 5: None, 7: None, 10: None}
>>> new_list = list(num_dict.keys())
>>> new_list
[1, 8, 9, 2, 3, 4, 6, 5, 7, 10]

利用index()获取到的是第一次出现的索引

第三种方式:利用index()获取到的是第一次出现的索引
通过判断列表中值第一次出现的索引值与遍历的计数器的游标cursor值是否相等,相等的话则是第一次出现,否则是重复出现。看例子:


>>> num_list = [1,8,9,1,2,3,4,6,5,7,10,5,6,8,3,4]
>>> new_list = []
>>> cursor=0
>>> while cursor < len(num_list):
...     if num_list.index(num_list[cursor]) == cursor:
...           new_list.append(num_list[cursor])
...     cursor += 1
...
>>> new_list
[1, 8, 9, 2, 3, 4, 6, 5, 7, 10]

来源:https://juejin.cn/post/6978509204336148494

标签:Python,列表,拼接,去重
0
投稿

猜你喜欢

  • PHP MVC框架中类的自动加载机制实例分析

    2023-11-04 09:18:09
  • 也说说语义

    2009-12-29 13:04:00
  • CSS在页面布局中实现div水平居中的方法总结

    2008-06-03 12:09:00
  • Python计时相关操作详解【time,datetime】

    2023-08-24 17:12:56
  • 怎么写好一份图形界面设计师简历

    2009-04-16 13:10:00
  • 详解链接的rel与target

    2007-11-05 18:25:00
  • win2000server IIS和tomcat5多站点配置

    2023-06-26 04:45:33
  • 从MySQL数据库表中取出随机数据的代码

    2023-11-14 09:53:58
  • 启动Atom并运行python文件的步骤

    2023-12-22 02:26:11
  • Java使用正则表达式(regex)匹配中文实例代码

    2023-06-17 07:59:46
  • asp下用OracleInProcServer完成对Oracle的连接和操作

    2008-04-13 07:10:00
  • Oracle平台应用数据库系统的设计与开发

    2010-07-21 13:03:00
  • 静态页面实现文章点击数统计的js方法

    2008-01-23 19:17:00
  • 教学演示-UBB,剪贴板,textRange及其他

    2008-01-27 13:46:00
  • PHP字符串中提取文件名的实例方法

    2023-06-12 18:57:32
  • wordpress安装过程中遇到中文乱码的处理方法

    2023-11-15 12:24:52
  • 在Oracle PL/SQL中游标声明中表名动态变化的方法

    2009-02-28 10:39:00
  • Python实现螺旋矩阵的填充算法示例

    2022-06-30 00:18:47
  • 新 API 寻求让 JavaScript 操作本地文件

    2009-11-27 18:28:00
  • Python虚拟环境的创建和使用详解

    2022-09-14 18:05:26
  • asp之家 网络编程 m.aspxhome.com