一:回忆一(序列)
python的字符串、列表、元组是不是都可以通过下标访问?因为他们都是序列!
序列类型
定义:有序排列的一组元素的集合,类型成员之间是有序排列的,并且可以通过下标偏移量访问他们的一个或几个成员。
序列特点:序列的下标偏移量是从0开始到总元素数-1结束,之所以要减一是因为我们是从0开始数的。
序列相关操作
1.切片操作(参考字符串切片)
切片是序列共有的操作,切片的详细内容可以参考字符串切片,下面是简要的概括。
[:]提取整个字符串
[start:]从start提取到结尾
[:end]从头提取到end-1
[start:end]从start提取到end-1
[start:end:step]从start提取到end-1,每step距离取一个值
切片操作中,start如果不指定则默认值为0,即从字符串的开头截取;end如果不指定则默认为截取到最后1个(含最后1位),step如果不指定则默认值为1。
2.成员操作符in
判断一个字符串是否包含在另一个字符串里面
3.成员操作符not in
判断一个字符串是否不在另一个字符串里面
4.链接符
+将两个字符串连接在一起
5.字符串重复
*重复字符串n次
运算符
Python表达式
结果
描述
支持的数据类型
+
[1, 2] + [3, 4]
[1, 2, 3, 4]
合并
字符串、列表、元组
*
'Hi!' * 4
['Hi!', 'Hi!', 'Hi!', 'Hi!']
复制(重复)
字符串、列表、元组
in
3 in (1, 2, 3)
True
元素是否存在
字符串、列表、元组、字典
not in
4 not in (1, 2, 3)
True
元素是否不存在
字符串、列表、元组、字典
切片
字符串、列表、元组
二:回忆二(可变和不可变)
前面或多或少说过字典可变的,数值是不可变的等等,可变和不可变到底说的什么呢?哪些类型是可变的,哪些是不可变的呢?
什么是可变和不可变
我们知道定义变量就是在内存找了一片区域存储一个值,所谓的可变和不可变是说你能否原地修改这个值以及修改后这个变量后内存地址会不会变化。
数值型和字符串、元组是不能对本身的数据做任何修改的,除非重新赋值。而重新赋值意味着开辟一个新的空间,内存地址自然会变化(对1个变量a重新赋值和修改它是两回事)。可变数据类型可以在自身基础上对元素增删改查,如果重新赋值也是重新开辟内存,内存地址也会改变。
上面的解释虽然简单,但足够理解了!(实际上ython内存管理机制,Python对int类型和较短的字符串进行了缓存,无论声明多少个值相同的变量,实际上都指向同个内存地址)。
1.可变类型,值可以改变:
列表list
字典dict
2.不可变类型,值不可以改变:
数值类型int、float、complex、frozenset[set的不可变版本]
布尔bool
字符串str
元组tuple
# ‐*‐ coding: utf‐8 ‐*‐
# 可变对象
a = [1, 2, 3]
print('初始时a的值',a,'a的内存地址',id(a))
a[1] = 4
print('修改后a的值',a,'a的内存地址',id(a))
# 不可变对象
b = (1, 2, 3)
b[1] = 4
"""
报错:TypeError: 'tuple' object does not support item assignment
"""
结果:
D:installpython3python.exe D:/pyscript/test/1.py
Traceback (most recent call last):
File "D:/pyscript/test/1.py", line 11, in
b[1] = 4
TypeError: 'tuple' object does not support item assignment
初始时a的值 [1, 2, 3] a的内存地址 3687848
修改后a的值 [1, 4, 3] a的内存地址 3687848
Process finished with exit code 1
三:回忆三(容器类型,可迭代)
列表集合字典等都可以通过for循环一个个输出出来(专业说法是可迭代),因为他们都是容器类型!
tuple
string
list
set
frozenset
dictionary
以上我们都学过,都属于容器类型,python容器知识很复杂,涉及到数据结构等知识,感兴趣自行研究!