python中list tuple dict set的区别_python中list/tuple/dict/set的区别

序列是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有以下几个特点:

查找和插入的速度极快,不会随着key的增加而增加;

需要占用大量的内存,内存浪费多。

而list相反:

查找和插入的时间随着元素的增加而增加;

占用空间小,浪费内存很少。

所以,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查询效率低、但是消耗内存少

再议不可变对象

在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key。

为什么要设计str、None这样的不变对象呢?因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。

2a68bea11ce826ef8e872b4b33fa402b.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pythonlist(列表),tuple(元组),dict(字典)和set(集合)是常见的数据结构。 1. 列表(list)是一个可变的、有序的元素集合。可以通过方括号[]来创建一个列表,列表的元素可以是任意类型,并且可以重复。列表提供了丰富的操作方法,如添加元素、删除元素、获取元素等。 2. 元组(tuple)是一个不可变的、有序的元素集合。可以通过小括号()来创建一个元组,元组的元素可以是任意类型。元组一旦创建后,不能修改其元素的值。元组通常用于存储不可变的数据,如坐标位置、颜色等。 3. 字典(dict)是一种键值对(key-value)的数据结构。可以通过花括号{}来创建一个字典,字典的元素是无序的,并且每个元素由一个键和对应的值组成。字典的键必须是唯一的,而值可以是任意类型。字典提供了根据键获取值、添加键值对、删除键值对等操作。 4. 集合(set)是一个无序的、不重复的元素集合。可以通过花括号{}或set()函数来创建一个集合,集合的元素不能重复。集合提供了并集、交集、差集等常用的数学运算操作,同时还支持元素的添加、删除等操作。 在编程,根据具体的需求选择使用合适的数据结构能够更高效地处理数据,并且提供相应的操作方法方便开发。以上是对Python常见的列表、元组、字典和集合的简要介绍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值