大爽Python入门教程 2-2 序列: 字符串、元组与列表
大爽Python入门公开课教案
点击查看教程总目录
序列
序列(sequence): 顾名思义,有序的排列。
有序排列的一串数据。
一种容器,容器内成员有序排列。
python的字符串str
,元组tuple
,列表str
都是序列。
所以字符串str
,元组tuple
,列表str
有些操作是相通的,
都支持序列操作。
序列内的成员个数,一般也称为序列的长度。
可以使用len(sequence)
函数获取,
其中sequence
为序列变量。
使用示例:
>>> len("abcde")
5
>>> len('')
0
>>> a_tuple = (3, 4)
>>> len(a_tuple)
2
>>> a_list = [1, 0, 0, 1]
>>> len(a_list)
4
索引
索引(index): 序列中元素的位置的值(编号)。
python的索引从0开始,
即序列第一个值的索引为0,
第二个值的索引为1,
第三个值的索引为2。
以此类推。。。
可以通过索引来获取对应位置的数据。
写法为sequence[index]
由于索引从0开始,
也有人喜欢把第一个值称为第0个值。
但是这样会导致交流时理解混乱。
比如一个人说第一个值,到底是列表开头的那个,还是索引为1的那个。
所以为了准确与避免混淆,表达时最好专门说明其索引为几
比如列表中索引为1的值...
而第几个值,还是按照常规意思来理解。
超出索引会报错
IndexError: ... index out of range
使用示例:
字符串
>>> s = "abc"
>>> s[0]
'a'
>>> s[1]
'b'
>>> s[2]
'c'
>>> s[3]
Traceback (most recent call last):
File "<input>", line 1, in <module>
IndexError: string index out of range
元组
>>> t = ("li hua", 18)
>>> t[0]
'li hua'
>>> t[1]
18
>>> t[2]
Traceback (most recent call last):
File "<input>", line 1, in <module>
IndexError: tuple index out of range
列表
>>> numbers = ["one", 2.0, "3", 4, "five"]
>>> numbers[0]
'one'
>>> numbers[1]
2.0
>>> numbers[2]
'3'
>>> numbers[3]
4
>>> numbers[4]
'five'
>>> numbers[5]
Traceback (most recent call last):
File "<input>", line 1, in <module>
IndexError: list index out of range
可以通过
sequence.index(value)
也可以得到值对应的索引
但是如果值没出现过的话,会报错ValueError
。
示例如下:
>>> s = "abc cba"
>>> s.index("a")
0
>>> s.index("c")
2
>>> s.index("d")
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: substring not found
倒序索引
python中索引可以是负数,代表倒着数的序号。
倒数第一个索引是-1,
倒数第二个索引是-2,
倒数第三个索引是-3,
以此类推。。。
示例
>>> numbers = ["one", 2.0, "3", 4, "five"]
>>> numbers[-1]
'five'
>>> numbers[-2]
4
>>> numbers[-5]
'one'
>>> numbers[-6]
Traceback (most recent call last):
File "<input>", line 1, in <module>
IndexError: list index out of range
切片
切片切片,切出一片。从序列中切出一段,
或者说截取出一段,更准确的来说是复制了一段
得到一个新的序列。
注:切片操作不会改变原来的序列。
切片操作的基础语法是sequence[start:end]
,
取出从start这个索引开始(包含start索引对应的值),
一直到end这个索引为止(不包含end索引对应的值)的这一段。
>>> s = "abcdefg"
>>> s[1]
'b'
>>> s[1:4]
'bcd'
>>> s[4]
'e'
>>> s[4:6]
'ef'
start和end都可以不写,
不写start代表从开头开始,
不写end代表没有end(从start开始后一直取完后面所有的)。
>>> s[:3]
'abc'
>>> s[0:3]
'abc'
>>> s[4:]
'efg'
切片操作时,
start和end可以超出序列长度,不会报错。
>>> s[4:7]
'efg'
>>> s[4:10]
'efg'
>>> s[7:10]
''
start甚至可以大于end,
不过此时取出来的是空(start等于end时也是空)。
>>> s[3:1]
''
>>> s[3:3]
''
解包Unpack
解包Unpack语法不是序列专属的,很多容器都支持这个语法。
解包这个概念比较生僻,不好理解。
那么这么想:
首先,pack是打包的意思,
比如把几个苹果装到一个箱子容器里面
Unpack就是这个过程反过来,
把装有苹果的箱子里的苹果全部取出来。
示例:
>>> loc = (3, 4)
>>> x, y = loc # Unpack
>>> x
3
>>> y
4
上面的x, y = loc
就是解包元组
英语来讲就是Unpack the tuple
解包时,序列中有多少个元素,左边就要有对应个数的变量。
数量不匹配就会报错ValueError
>>> a,b,c = loc
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: not enough values to unpack (expected 3, got 2)
解包Unpack的语法,一般是tuple用。
虽然字符串和列表也可以用,但是由于其长度一般不确定,
所以一般不是用这个语法。
修改
注意:
字符串和元组都是不可变对象,不可以修改。
列表是可变对象,可以修改。
修改字符串和元组会报错TypeError
。
对于列表,可以使用索引来修改对应索引的值。
其语法为list[index]=new_value
示例如下
>>> s = "abcde"
>>> s[0] = "d"
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> lst = [1, 2, 3, 4, 5]
>>> lst[3] = 6
>>> lst
[1, 2, 3, 6, 5]
>>> lst[0], lst[2] = lst[2], lst[0]
[3, 2, 1, 6, 5]
最后2句补充说明: 先执行等号右边的,
再把等号右边的赋值给等号左边的。
python的字符串是不可变对象,不能直接修改,
有人可能碰到过一些方法,看起来好像修改了字符串。
这些方法本质上都是生成了一个新的字符串。
拓展说明:
对于元组来讲,成员对象不能变,
但是变量的属性修改是可以的。
这是比较复杂的东西,暂不深究。
拼接
序列之间可以使用加法,表示拼接,
会得到一个新的拼到一起的序列。
示例
>>> "123" + "456"
'123456'
>>> (1, 2) + (3, 4)
(1, 2, 3, 4)
>>> ["a", 12] + ["b", 20]
['a', 12, 'b', 20]
大爽Python入门教程 2-2 序列: 字符串、元组与列表的更多相关文章
- 大爽Python入门教程 1-2 数与字符串
大爽Python入门公开课教案 点击查看教程总目录 1 整数与浮点数 整数大家都知道,比如1, 2, 10, 123, 都是整数int. 浮点数是什么呢? 上一节的除法运算,不知道有没有人注意到,其结 ...
- 大爽Python入门教程 3-3 循环:`for`、`while`
大爽Python入门公开课教案 点击查看教程总目录 for循环 可迭代对象iterable 不同于其他语言. python的for循环只能用于遍历 可迭代对象iterable 的项. 即只支持以下语法 ...
- 大爽Python入门教程 3-1 布尔值: True, False
大爽Python入门公开课教案 点击查看教程总目录 1 布尔值介绍 从判断说起 回顾第一章介绍的简单的判断 >>> x = 10 >>> if x > 5: ...
- 大爽Python入门教程 2-3 字符串,列表,字典
大爽Python入门公开课教案 点击查看教程总目录 除了通用的序列方法, 列表和字符串还有些自己的专属方法. 后面介绍有些是英中文对照介绍(英文来自官方文档), 便于大家更深入的去理解其意思. 灵活的 ...
- 大爽Python入门教程 2-4 练习
大爽Python入门公开课教案 点击查看教程总目录 方位输出 第一章有一个思考题,方位变换: 小明同学站在平原上,面朝北方,向左转51次之后(每次只转90度), 小明面朝哪里?小明转过了多少圈? (3 ...
- 大爽Python入门教程 3-4 实践例题
大爽Python入门公开课教案 点击查看教程总目录 1. 求和 使用循环,计算列表所有项的和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, 11 ...
- 大爽Python入门教程 3-5 习题
大爽Python入门公开课教案 点击查看教程总目录 1 求平方和 使用循环,计算列表所有项的平方和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, ...
- 大爽Python入门教程 3-6 答案
大爽Python入门公开课教案 点击查看教程总目录 1 求平方和 使用循环,计算列表所有项的平方和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, ...
- 大爽Python入门教程 2-5 *拓展实践,对比与思考
大爽Python入门公开课教案 点击查看教程总目录 本文偏难. 推荐等第一二三四章上完后,回过来拓展阅读. 基础情景思考 假设有这样一张成绩表 最左边的一列是名字,起名麻烦. 这里直接用ABC...来 ...
随机推荐
- MySQL高可用架构-MMM、MHA、MGR、PXC
主从复制如何工作 在主库把数据记录到binlog(二进制日志). 备库开IO线程把binlog复制到自己的relaylog(中继日志). 备库读取中继日志,重放到备库上. 半同步复制 半同步复制可以确 ...
- Superior Scheduler:带你了解FusionInsight MRS的超级调度器
摘要:Superior Scheduler是一个专门为Hadoop YARN分布式资源管理系统设计的调度引擎,是针对企业客户融合资源池,多租户的业务诉求而设计的高性能企业级调度器. 本文分享自华为云社 ...
- $hadow$ocks与Privoxy基础原理
$hadow$ocks与Privoxy基础原理 以下所有提到$hadow$ocks的均以ss指代 为什么要用ss呢? 在早期(如今绝大多数也是),对于互联网的访问流程是及其简单的:浏览器(或其他客户端 ...
- 创建第一个Android项目
目录 创建第一个Android项目 创建HelloWorld项目 选择模板 选择模板界面的英文翻译 配置项目 配置项目界面英文翻译及解释 配置项目界面的注意事项 Name的命名规范 Package n ...
- 使用.NET(C#或VB.NET)开发NX外部程序
1.如何不用将exe程序拷贝到UGII目录下运行? 答:在调用NX Open命令函数前,将当前目录移动到NX安装目录\UGII\,NX安装目录必须和环境变量UGII_BASE_DIR的值一致,否则报错 ...
- sql常用的统计公式
hivesql中max,min函数不能作用于多列,因此在有上下门限区间限制时多用公式直接计算. max(x,y)=(x+y+ABS(x-y))/2 min(x,y)=(x+y-ABS(x-y))/2 ...
- 2021 从零开始学Git【新版本Git - 8000字详细介绍】
我写的这篇文章,主要是记录自己的学习过程,也希望帮助读者少踩坑(比如不同版本可能命令不兼容等).本文面向git零基础初学者,建议读者按照文中命令自己全部操作一遍(注意运行环境). 我的运行环境:win ...
- 【UE4 C++】学习笔记汇总
UE4 概念知识 基础概念--文件结构.类型.反射.编译.接口.垃圾回收.序列化[导图] GamePlay架构[导图] 类的继承层级关系[导图] 反射机制 垃圾回收机制/算法 序列化 Actor 的生 ...
- django通过管理页上传图片
1.配置目录 新建上传录.static/medis 2.设置上传文件保存路径 # setting.py中设置上传文件路径static/media MEDIA_ROOT = os.path.join(B ...
- Java:Set接口小记
Java:Set接口小记 对 Java 中的 Set接口 与 其实现类,做一个微不足道的小小小小记 概述 public interface Set<E> extends Collectio ...