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

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

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

python中list/tuple/dict/set的区别的更多相关文章

  1. Python中list,tuple,dict,set的区别和用法

    Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set.这里对他们进行一个简明的总结. List ...

  2. Python中list,tuple,dict,set的区别和用法(转)

    原文地址:http://www.cnblogs.com/soaringEveryday/p/5044007.html Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个 ...

  3. python中list,tuple,dict,set等深浅拷贝的问题记录

    对于字典.元祖.列表 而言,进行赋值.浅拷贝和深拷贝时,其内存地址的变化是不同的. 1.赋值 赋值,只是创建一个变量,该变量指向原来内存地址,如: 1 2 3 n1 = {"k1" ...

  4. Python中内置数据类型list,tuple,dict,set的区别和用法

    Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...

  5. python中import和from...import...的区别

    python中import和from...import...的区别: 只用import时,如import xx,引入的xx是模块名,而不是模块内具体的类.函数.变量等成员,使用该模块的成员时需写成xx ...

  6. 转发 python中file和open有什么区别

    python中file和open有什么区别?2008-04-15 11:30地痞小流氓 | 分类:python | 浏览3426次python中file和open有什么区别?都是打开文件,说的越详细越 ...

  7. Python中str()与repr()函数的区别——repr() 的输出追求明确性,除了对象内容,还需要展示出对象的数据类型信息,适合开发和调试阶段使用

    Python中str()与repr()函数的区别 from:https://www.jianshu.com/p/2a41315ca47e 在 Python 中要将某一类型的变量或者常量转换为字符串对象 ...

  8. python中的字典(dict),列表(list),元组(tuple)

    一,List:列表 python内置的一种数据类型是列表:list.list是一种有序的数据集合,可以随意的添加和删除其中的数据.比如列出班里所有的同学的名字,列出所有工厂员工的工号等都是可以用到列表 ...

  9. python中的list, dict, tuple以及collections模块的基本用法

    1.关于list的一些基本用法 # 创建没有初值的列表 list1=[] # 创建有初值的列表 list2=['this','is','a','list'] # 创建给定长度但初值不确定的列表 lis ...

随机推荐

  1. SAR图像处理 MSTAR数据库利用问题

    本人最近刚接手的新活,打算从事SAR目标识别的研究,从美国的mstar数据库中下到一些资源,但是这些数据并不是原始图片的格式,需要转换,由于刚刚接触,并不太了解,所以特此请教!如有感兴趣的朋友可以一起 ...

  2. [设计模式-行为型]状态模式(State)

    一句话 在一个类的对象中维护状态的类的对象 概括

  3. yii2中判断值是否存在二维数组中

    //在yii2中,在类里面的函数,可以不加action $arr = array( array('a', 'b'), array('c', 'd') ); in_array('a', $arr); / ...

  4. linux--redis的安装和配置和开启多个端口

    在workerman开发过程中需要安装redis来存储用户ip.端口等信息 首先UBUNTU中安装redis: apt-update  //更新apt包源apt-get install redis-s ...

  5. docker 与 yarn

    有时我们的项目是使用yarn去发布的,当需要使用docker发布这个项目时,安装yarn是必须的,但是平时使用的npm install -g yarn此时却不可用 从网站上找到解决的方法 地址:htt ...

  6. [jquery] ajax parsererror

    http://stackoverflow.com/questions/5061310/jquery-returning-parsererror-for-ajax-request 方法一: 直接去掉 d ...

  7. aoj 0033 Ball【dfs/枚举】

    有一个形似央视大楼(Orz)的筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B裤管或C裤管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B裤管和C裤管中的球从下 ...

  8. 百度之星资格赛 2016 Problem 1002

    本文链接:http://www.cnblogs.com/Ash-ly/p/5494623.html 题意: 度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个 ...

  9. luoguP2296 寻找道路

    因为是出边与终点直接或间接相连,所以将边反向,从终边开始,将所有终边能到达的点都打上标记因为是最短路,所以不需要处理重边和自环,于是再跑最短路就好题目关键:路径上的所有点的出边所指向的点都直接或间接与 ...

  10. 33、Django实战第33天:我的消息

    1.编辑usercenter-message.html继承usercenter-base.html 2.编辑users.views.py ... from operation.models impor ...