一、序列
- 成员有序排列的,且可以通过下标偏移量访问到它的一个或者几个成员,这类类型统称为序列。
- 序列数据类型包括:字符串,列表,和元组类型。
- 特点: 都支持下面的特性
- 索引与切片操作符
- 成员关系操作符(in , not in)
- 连接操作符(+) & 重复操作符(*)
二、列表
- 数组: 存储同一种数据类型的集和。scores=[12,95.5]
- 列表(打了激素的数组): 可以存储任意数据类型的集和。
li = [1, 2, 3, [1, 2]]
print(li[0])
print(li[::-1])
print(li[-1])
print(li[-1][0])
print(li[3][-1])
- 列表的拉伸(extend)
li = [1, 2, 3]
li.extend([5, 8, 7])
print(li)
- 列表的添加(insert)
li = [1, 2, 3]
li.append(4) #append追加元素到列表
print(li)
li = [1, 2, 3]
li.insert(0, 'cat') #insert指定位置添加元素
print(li)
li = [1, 2, 3]
li.insert(0, 'cat')
li.insert(1, 'wes')
print(li)
- 列表的修改
li = [1, 2, 3]
li[0] = 'westos' # 修改列表的元素:直接重新赋值
li[-1] = 'redhat'
li[:2] = ['linux','cat']
print(li)
- 列表的元素出现次数查看
li = [1,2,3,1,1,3]
print(li.index(1)) #索引
print(li.count(1)) #计算次数
- 列表的删除(remove)
li = [1,2,3]
print(li.remove(1)) #删除指定元素
print(li.remove(2))
print(li)
print(li.clear()) #清扫所有
print(li)`
列表增删改查
- 查
- count #次数
- index #指定索引
- 增
- append(尾加)
- extend(拉伸)
- insert(指定添加)
- 删
- pop
- remove
- cleal
- del li
- 改
- 索引
- 切片
- 其他
- copy
- sort
三、元组
元组的创建,删除及特性
1). 定义空元组 tuple = ()
2). 定义单个值的元组 tuple = (fentiao,)
3). 一般的元组 tuple = (fentiao, 8, male)
元组的方法
- t.count(value)–>int 返回value在元组中出现的次数;
- t.index(value) 返回value在元组中的偏移量(即索引值)
多元赋值机制
- x, y, z = 1, 2, ‘westos’ 等价于 (x, y, z) = (1, 2, ‘westos’) , 等号两边的对象都是元组并且元组的小括号是可选的。
变量交换
x=2; y=10;x, y = y, 2; print(x,y)
这种交换方式无需中间变量即可交换两个变量的值。那么具体实现机制是怎样的呢?
x=2;
y=10;
x, y = y, 2;
print(x,y)
实现机制:
1). 构造一个元组(y, x);
2). 构造另一个元组(x, y);
3). 元组(y, x)赋值给(x, y),元组赋值过程从左到右,依次进行
四、命名元组
- collections.namedtuple(typename, field_names)
- typename:类名称
- field_names: 元组中元素的名称
from collections import namedtuple
User = namedtuple('User',['name','age','id'])
User = namedtuple('User','name age id')
user =User('张三','18','2021')
print(user.name)
print(user.age)
print(user.id)
is和==的区别
-
1). Python中对象的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。
-
2). is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。
-
3). ==用来比较判断两个对象的value(值)是否相等;(type和value)
is也被叫做同一性运算符, 会判断id是否相同;(id, type 和value)
五、深拷贝与浅拷贝
- 赋值: 创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。(=)
- 浅拷贝: 对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值。(li.copy(), copy.copy())
- 公用一个值;
- 这两个变量的内存地址一样;
- 对其中一个变量的值改变,另外一个变量的值也会改变;
n1 = [1,2,3,[1,2]]
n2 = n1.copy()
print(id(n1),id(n2))
print(id(n1[-1]),id(n2[-1]))
n1[-1].append(4)
print(n2)
- 深拷贝: 一个变量对另外一个变量的值拷贝。(copy.deepcopy())
- 两个变量的内存地址不同;
- 两个变量各有自己的值,且互不影响;
- 对其任意一个变量的值的改变不会影响另外一个;
#深拷贝
n1 = [1,2,3,[1,2]]
n2 = copy.deepcopy(n1)
print(id(n1),id(n2))
print(id(n1[-1]),id(n2[-1]))
n1[-1].append(4)
print(n2)