python中list/tuple/dict/set/namedtuple/ordereddict的区别

2024-03-17 15:08

本文主要是介绍python中list/tuple/dict/set/namedtuple/ordereddict的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。Python有6个序列的内置类型,但最常见的是列表list和元组tuple。序列都可以进行的操作包括索引,切片,加,乘,检查成员。此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。列表的数据项不需要具有相同的类型,创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。

1、list 列表

  python内置的数据类型,有序集合,随时增删。包含的数据类型可以不同:整数、浮点数、字符串、list、tuple、dict、set、bool、空值、常量

list1=[1.2, 2.1, 3, 3.2, 5, 'a', (2, 2, 3), [1.2, 2], {1: 2, 2: 3}, set([2, 3, 2.2]), 3.14, None]

空的列表:list1=[]; list2=list()

函数:len()、append()、remove()移除列表中某个值的第一个匹配项、insert()、pop()、sort()、del、list()、reverse()、index()从列表中找出某个值第一个匹配项的索引位置、count()统计某个元素在列表中出现的次数、extend()在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)

删除:del list1[0]

元祖转换为列表:tuple-->list  list(tuple)

append(value)把元素添加到末尾、insert(i,value)把元素添加到任意位置;pop()删除末尾元素、pop(i)删除指定位置的元素、remove(value)直接删除某个元素值;list1.sort()对元素进行排序

取值:list1[0]、list1[4:]、list1[:-4]、list1[2:-3]

嵌套:list里面可以嵌套list从而形成类似于二维、三维、多维数组的东东,list1[1][2]/list1[2][3][3][5]……

修改:修改某个位置元素的值 list1[i]=value

2、tuple 元祖

  python内置的数据类型,有序列表,一旦初始化,无法修改。tuple不可变,所以代码更安全。包含的数据类型可以不同:整数、浮点数、字符串、list、tuple、dict、set、bool、空值、常量

空的元祖:tuple1=(); tuple2=tuple()

函数:len()、del 删除整个元祖、tuple()把列表转换为元祖/append()、remove()、insert()、pop()、sort()

取值:tuple1[0]、tuple1[-1]、tuple1[3:]、tuple1[:-1]、tuple1[2:-2]

表示:空的tuple1=();一个元素tuple1=(2,)后面跟着一个逗号

虽然tuple不可变,但是它里面的list、dict、set是可以变的

创建:tup1 = ('physics', 'chemistry', 1997, 2000); tup2 = (1, 2, 3, 4, 5 ); tup3 = "a", "b", "c", "d";

运算符:(1, 2, 3) + (4, 5, 6)、('Hi!',) * 4、3 in (1, 2, 3)、for x in (1, 2, 3): print x,

3、dict 词典  d={'Michael': 95, 'Bob': 75, 'Tracy': 85}

python内置,键值对(key-value)方式存储,查找速度快;dict的key必须是不可变对象(字符串、数字、元祖);value包含的数据类型可以不同:整数、浮点数、字符串、list、tuple、dict、set、bool、空值、常量

空的词典:dict1={}; dict2=dict()

函数:len()、get()、pop()、del、has_key()、items()、keys()、values()、update()、append()、remove()、insert()、sort()

取值:d['Michael']

赋值:d['Michael']=100

添加:d['Jim']=22

删除:pop('Tracy'); del d['Jim'];del d

判断key是否存在:'Tracy' in d; d.get('Tracy')如果key不存在,返回None; d.get('Tracy', value) 如果key不存在,返回自己指定的value

和list比较,dict有以下几个特点:

  1. 查找和插入的速度极快,不会随着key的增加而增加;
  2. 需要占用大量的内存,内存浪费多。

而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

所以,dict是用空间来换取时间的一种方法。

dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象

这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。

要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key

4、set 无序集合、key不重复

无索引、无切片、作为一个无序的集合,set不记录元素位置或者插入点。因此,set不支持 indexing, slicing, 或其它类序列(sequence-like)的操作

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

要创建一个set,需要提供一个list作为输入集合:

 s = set([1, 2, 3]):set([1,2,3])

 s = set('boy') : set(['b','o','y'])

 s = set(('cmd','pid')) :set(['cmd','pid'])

 s = {'txt', 'png', 'jpg', 'xls', 'csv', 'zip', 'xlsx', 'gif', 'GIF'}

空的的集合:  set1 = set();

函数:pop()、add()、remove()、update()、len()、clear()、discard()、append()、insert()、sort()

添加:add(key)、update();区别 s.add('boy'):set(['boy',1,2,3]);s.update('boy'):set(['boy','b',1,2,3,'o','y']);s.update([23,22,32])添加多项

删除:remove(key)删除指定位置的元素,如果不存在,引发KeyError;pop()删除并且返回集合“s”中的一个不确定的元素, 如果为空则引发 KeyError;clear()删除所有元素;s.discard(x),如果在 set “s”中存在元素 x, 则删除

交集:set1 & set2 (set1.intersection(set2))两个set的共有元素

并集: set1 | set2 (set1.union(set2))两个set的元素相加后去重

差集:set1 - set2 (set1.difference(set2)) 集合set1去除和和集合set2相同的部分

对称差集:set1^set2 (set1.symmetric_difference(set2))项在set1或set2中,但不会同时出现在二者中

操作:key in set1; key not in set1 ;for key in set1;

   set1.issubset(set2)等价于set1<=set2 : 测试set1中的每一个元素是否都在set2中

   set1.issuperset(set2)等价于set1>=set2 : 测试set2中的每一个元素是否都在set1中 

   s.copy()  返回 set “s”的一个浅复制  

set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。试试把list放入set,看看是否会报错

重复元素在set中自动被过滤

应用示例:怎么去除海量列表里重复元素:

a = [11,22,33,44,11,22] 

a = list(set(a)) :  [33, 11, 44, 22]  

总结:1、list、tuple是有序列表;dict、set是无序列表

     2、list元素可变、tuple元素不可变

     3、dict和set的key值不可变,唯一性

     4、set只有key没有value

     5、set的用途:去重、并集、交集等

     6、list、tuple:+、*、索引、切片、检查成员等

   7、dict查询效率高,但是消耗内存多;list、tuple查询效率低、但是消耗内存少

5、tuple有什么list不可替代的优点?

a. tuple是全面优于list的性能

b. tuple能作为key

6、namedtuple的示例

from collections import namedtuple
# 生成一个City类
City = namedtuple("City", "name country polulation coordinates")
# 实例化
tokyo = City("Tokyo", 'JP', '36.93', ('35.68','139,69'))print(tokyo)
# City(name='Tokyo', country='JP', polulation='36.93', coordinates=('35.68', '139,69'))print(tokyo.name)
# Tokyo
# 打印字段名
print(City._fields)
('name', 'country', 'polulation', 'coordinates')# 生成新实例
LatLong = namedtuple('LatLong', 'lat long')
Xiamen_tuple = ('Xiemen', 'China', '40,54', LatLong(24.26,118.03))
Xiamen = City._make(Xiamen_tuple)print(Xiamen)
# City(name='Xiemen', country='China', polulation='40,54', coordinates=(24.26, 118.03))# 将具名元组转为OrderDict
Xiamen_dict = Xiamen._asdict()
print(Xiamen_dict)
# OrderedDict([('name', 'Xiemen'), ('country', 'China'), ('polulation', '40,54'), ('coordinates', LatLong(lat=24.26, long=118.03))])

7、ordereddict按照key来排序

from collections import OrderedDictmy_dict = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
last_item = my_dict.popitem(last=True)print(last_item) 

参考:1、http://www.runoob.com/python/python-dictionary.html

     2、http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/0013868193482529754158abf734c00bba97c87f89a263b000

From https://www.cnblogs.com/shengulong/p/7149832.html

这篇关于python中list/tuple/dict/set/namedtuple/ordereddict的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/819301

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚