Python 元组、列表
2024-09-07 08:48:17
Python中,最常用的数据结构就是序列了。序列有以下几种:元组,列表,字符串等。注:代码都是在IDE中编辑的,没有用交互式环境。
一、元组(tuple)
元组其实有点类似C++中的数组,即一旦指定了内容,那么这个元组就固定下来不能变了。不过并不是绝对不能改变,如果一个元组成员是一个列表,那么这个列表的修改操作是允许的。另外,Python是动态语言,因此元组中各个成员并不需要是同一种类型:
a = (1, 3, 5, [7, 9])
# a[1] = 11 错误,不允许修改元组的成员
a[3].append(11)# 正确
print a
(1, 3, 5, [7, 9, 11])
大部分时候,列表可以代替元组,不过,元组可以作为字典中的key,而列表不可以;另外,元组是许多内建函数的返回类型
二、列表(list)
列表与元组非常相似,他们支持的操作也有很多相似的地方,具体功能我们在一部分再介绍。列表用[ ]来表示,不同之处在于,列表可以随意修改元素以及添加元素:
a = [1, 3, 5, [7, 9]]
a[1] = 111
a[3].append(11)
print a [1, 111, 5, [7, 9, 11]]
三、序列支持的操作
1、索引
类似于C++中的数组和std::list<T>,序列都是线性结构,支持使用下标来进行索引:
a = [1, 3, 5]
b = (2, 4 ,6)
c = 'this is a string'
print a[1], b[1], c[1], c[-1] 3 4 h g
同其他语言一样,下标是从0开始计的,即第一个元素的索引为0。此外,索引可以为负数,即从右侧开始计算。
2、分片
分片操作支持每次访问一定区间的元素,以及指定访问的步长:
a = [1, 3, 5, 7, 9]
b = (2, 4, 6, 8, 10)
print a[1:3], b[0:4:2] #注意,左闭右开区间
同样,分片操作也可以是负数,不过要注意步长是否匹配。
3、加法和乘法
加法会连接两个类型相同的序列(不能是元组),乘法会赋值N次该序列,并返回一个新的序列:
a = [1, 3, 5, 7, 9]
b = [2, 4, 6, 8, 10]
print a + b, '\n', a * 2 [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
[1, 3, 5, 7, 9, 1, 3, 5, 7, 9]
4、长度、最大最小值
len()函数返回元素的个数,max()和min()函数返回。对于长度,他们都调用类内定义的__len__方法。
四、列表支持的操作
简单点说,列表主要支持的就是添加/删除元素,以及索引、统计、排序等操作:
a = [1, 3, 11, 13, 9, 7, 5]
b = [22, 44]
a.append(111) # a = [1, 3, 11, 13, 9, 7, 5, 111]
a.count(1) #
a.extend(b) # a = [1, 3, 11, 13, 9, 7, 5, 111, 22, 44]
a.index(3) #
a.insert(1, 666) # a = [1, 666, 3, 11, 13, 9, 7, 5, 111, 22, 44]
a.pop() # a = [1, 666, 3, 11, 13, 9, 7, 5, 111, 22]
a.remove(5) # a = [1, 666, 3, 11, 13, 9, 7, 111, 22]
a.reverse()# a = [22, 111, 7, 9, 13, 11, 3, 666, 1]
a.sort() # a = [1, 3, 7, 9, 11, 13, 22, 111, 666]
最新文章
- [转载]:经纬度与WGS84坐标转换
- hdu--(1247)Hat’s Words(trie树)
- Visual Studio 2015 预览版 - 支持跨平台开发Android/iOS应用程序(内置安卓模拟器)
- Entity FrameWork知识点汇总
- raft 分布式协议 -- mongodb
- java笔记2之算术运算符
- Oracle包的概念
- cocos2d-x 3.1.1 学习笔记[21]cocos2d-x 创建过程
- DLL:无法解析的外部符号 ";__declspec(dllimport)
- 从编译器角度理解C++中的引用和指针
- iOS有关图片处理的总结 (四)------图片的饱和度,亮度,对照度。
- Java 标准 I/O 介绍
- IRepository<;Developer>; repository 出现 Abp.Domain.Repositories.IRepository which was not registered.
- python之路——博客目录
- 搭建简易的WebServer(基于pyhton实现简易Web框架 使用socket套接字)
- Code::Blocks设置支持C++ 11
- arp绑定IP
- 【nginx+tomcat集群】Nginx1.12.2+Tomcat7集群+负载均衡+Session共享
- 解决Android Studio中Rendering Problems错误
- 我的Android进阶之旅------&;gt;Android无第三方Jar包的源代报错:The current class path entry belongs to container ...的解决方法
热门文章
- BZOJ1126: [POI2008]Uci
- 《TCP/IP详解卷1:协议》——第6章 ICMP:Internet控制报文协议(转载)
- poj1470 Closest Common Ancestors [ 离线LCA tarjan ]
- SGU 194 无源无汇可行流求解
- XCode 或者ITune 添加账号时,提示:This action could not be completed. 或者 Access Privileges
- try catch finally执行顺序 (return / 变量覆盖)
- eclipse提速02 - eclipse.ini优化
- EJB学习(三)——java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to..
- 重载和重写在jvm运行中的区别(一)
- bootstrap中固定table的表头