Python之列表与元组的区别详解
相同点:都是序列类型
回答它们的区别之前,先来说说两者有什么相同之处。list 与 tuple 都是序列类型的容器对象,可以存放任何类型的数据、支持切片、迭代等操作
foos = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
foos[0:10:2]
[0, 2, 4, 6, 8]bars = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
bars[1:10:2]
(1, 3, 5, 7, 9)
两者的操作如此相似,Python 为什么还要设计一种叫 tuple 的类型出来呢?这就要从它们的不同之处来寻找答案。
不同点一:不可变 VS 可变
两种类型除了字面上的区别(括号与方括号)之外,最重要的一点是tuple是不可变类型,大小固定,而 list 是可变类型、数据可以动态变化,这种差异使得两者提供的方法、应用场景、性能上都有很大的区别。
列表特有方法:
foo = [2,3,1,9,4]
foo.sort() # 排序
foo.insert(5,10) # 插入
foo.reverse() # 反转
foo.extend([-1, -2]) # 扩展
foo.remove(10) # 移除
foo.pop() # 弹出最后一个元素
foo.append(5) # 追加
所有的操作都基于原来列表进行更新,而 tuple 作为一种不可变的数据类型,同样大小的数据,初始化和迭代 tuple 都要快于 listpython -m timeit “[1,2,3,4,5]”
10000000 loops, best of 3: 0.123 usec per looppython -m timeit “(1,2,3,4,5)”
100000000 loops, best of 3: 0.0166 usec per loop
同样大小的数据,tuple 占用的内存空间更少foo = tuple(range(1000))
bar = list(range(1000))
foo.sizeof()
8024
bar.sizeof()
9088
原子性的 tuple 对象还可作为字典的键foo = (1,(2,3))
d = {foo: 1}bar = (1, [2,3]) # 非原子性tuple,因为元组中包含有不可哈希的list
d = {bar: 1}
Traceback (most recent call last):
File “”, line 1, in
TypeError: unhashable type: ‘list’
不同点二:同构 VS 异构
tuple 用于存储异构(heterogeneous)数据,当做没有字段名的记录来用,比如用 tuple 来记录一个人的身高、体重、年龄。
person = (“zhangsan”, 20, 180, 80)
比如记录坐标上的某个点
point = (x, y)
而列表一般用于存储同构数据(homogenous),同构数据就是具有相同意义的数据,比如下面的都是字符串类型
[“zhangsan”, “Lisi”, “wangwu”]
再比如 list 存放的多条用户记录
[(“zhangsan”, 20, 180, 80), (“wangwu”, 20, 180, 80)]
数据库操作中查询出来的记录就是由元组构成的列表结构。
因为 tuple 作为没有名字的记录来使用在某些场景有一定的局限性,所以又有了一个 namedtuple 类型的存在,namedtuple 可以指定字段名,用来当做一种轻量级的类来使用。
Python之列表与元组的区别详解的更多相关文章
- 基于python中staticmethod和classmethod的区别(详解)
例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 class A(object): def foo(self,x): print "executing foo ...
- python中列表和元组的区别
列表(list)特点: 1.可变类型且有序的,有索引值. 元组特点: 1.不可变类型且有序的,通过下标索引值访问 2.元组里面只有一个元素的时候该元组类型就是这个元素的类型.例如:t=(1) t的类型 ...
- Python中__init__和__new__的区别详解
__init__ 方法是什么? 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候.例如: # -*- cod ...
- Python中列表,元组,字典,集合的区别
参考文档https://blog.csdn.net/Yeoman92/article/details/56289287 理解Python中列表,元组,字典,集合的区别 列表,元组,字典,集合的区别是p ...
- python笔记-列表和元组
列表和元组: -可以将列表和元组当成普通的数组 -列表和元组可以保存任意类型的python对象 -通过从0开始的数字索引访问元素 -列表和元组可以存储不同类型的对象 列表和元组的区别: -列表元素使用 ...
- Python基础------列表,元组的调用方法
Python基础------列表,元组的调用方法@@@ 一. 列表 Python中的列表和歌曲列表类似,也是由一系列的按特定顺序排列的元素组成的,在内容上,可以将整数,实数,字符串,列表,元组等任何类 ...
- Python基础-列表、元组、字典、字符串
Python基础-列表.元组.字典.字符串 多维数组 nums1 = [1,2,3] #一维数组 nums2 = [1,2,3,[4,56]] #二维数组 nums3 = [1,2,3,4,['a ...
- 【python】redis基本命令和基本用法详解
[python]redis基本命令和基本用法详解 来自http://www.cnblogs.com/wangtp/p/5636872.html 1.redis连接 redis-py提供两个类Redis ...
- python的dict,set,list,tuple应用详解
python的dict,set,list,tuple应用详解 本文深入剖析了python中dict,set,list,tuple应用及对应示例,有助于读者对其概念及原理的掌握.具体如下: 1.字典(d ...
随机推荐
- poj2299(归并排序求逆序对)
题目链接:https://vjudge.net/problem/POJ-2299 题意:给定一个序列,每次只能交换邻近的两个元素,问要交换多少次才能使序列按升序排列. 思路:本质就是求逆序对.我们用归 ...
- PTA(Advanced Level)1083.List Grades
Given a list of N student records with name, ID and grade. You are supposed to sort the records with ...
- Consecutive Numbers Sum
Given a positive integer N, how many ways can we write it as a sum of consecutive positive integers? ...
- yaml语言格式
YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言),强调这种语言以数据做为中心,而不是以置标语言为重点. 转载2篇比较好的关于yam ...
- (5.13)mysql高可用系列——1主3从复制(SSL)
目录: [0]需求 目前使用Mysql数据库,100GB+数据量,需要实现1主3从环境. 需要实现SSL安全复制,同时需要测试异常宕机切换演练 [1]实验环境 数据库架构:主从复制,基于主库搭建3个从 ...
- Linux:IFS分隔符的使用
IFS分隔符的使用 data="name, gender,rollno,location" 我们可以使用IFS读取变量中的每一个条目. oldIFS=$IFS IFS=, #IFS ...
- vm下centos7 mini版 NAT模式下配置静态IP
1.查看虚拟机的默认网关和子网掩码 a.vm菜单栏点击编辑->虚拟网络编辑器 b.选择VMnet8,点击NAT设置,查看子网掩码.网关IP 2. 修改服务器的网络配 ...
- Redis主从及哨兵
Redis主从用法 像MySQL一样,redis是支持主从同步的,而且也支持一主多从以及多级从结构. 主从结构,一是为了纯粹的冗余备份,二是为了提升读性能,比如很消耗性能的SORT就可以由从服务器来承 ...
- tensorflow零起点快速入门(3)
创造并运行数据 创造了-3到3的32条数据,然后通过sess.run获取并显示输出数据. x=tf.linspace(-3.0,3.0,32) print(x) sess=tf.Session() r ...
- Spring 的 Bean 管理(注解方式)
Spring 的 Bean 管理(注解方式) 1. 导入必要的 jar 包和 xml 文件 使用注解需要导入 spring-aop 的 jar 包. applicationContext.xml 文件 ...