一、列表
1.序列
1.成员有序排列的,且可以通过下标偏移量访问到它的一个或者几个成员,这类类型统称为序列。
2.序列数据类型包括:字符串,列表,和元组类型。
3.特点: 成员关系操作符, 连接操作符, 重复操作符, 索引与切片操作符
列表的创建与删除
数组: 存储同一种数据类型的集和。scores=[12,95.5]
列表(打了激素的数组): 可以存储任意数据类型的集和。
定义一个空列表
list = []
定义一个包含元素的列表,元素可以是任意类型,包括数值类型,列表,字符串等均可, 也可以嵌套列表。
list = ["fentiao", 4, 'gender']
list = [['粉条', 100], ["粉丝", 90], ["粉带", 98]]
列表的添加
列表可通过append追加一个元素到列表中:
列表可通过extend方法拉伸, 实现追加多个元素到列表中
在指定位置添加元素使用insert方法;
L.insert(index, object)
列表的修改
修改列表的元素:直接重新赋值;
列表的查看
查看某个列表元素的下表用index方法;
查看某个列表元素出现的次数用count方法;
列表的删除
list.remove()删除列表中的指定元素。
list.pop()根据元素的索引值进行删除指定元素。
list.clear: 清空列表里面的所有元素
del(list[])
上面的内容可以用一张表来展示
2.实战练习
会员信息管理系统
需求分析:
注册、登录
代码:
IDlist = [['root','westos'],
['student','redhat'],
['xinge','cool']
]
#print (IDlist)
while True:
select = input("请选择R(注册)或E(登录):")
if select == 'R':
for item in range(3):
ID = input('请输入帐号:')
for id in IDlist:
if ID == id[0]:
print("已存在账户,")
break
else:
PASS1 = input('请设置密码:')
PASS2 = input('请再次输入密码:')
if PASS1 == PASS2:
PASS = PASS1
print('注册成功!')
IDlist.append([ID,PASS])
#print(IDlist)
break
else:
print('密码不一致,请重新输入')
else:
print("注册超时,请下次注册,再见!")
else:
if select == 'E':
#print(IDlist)
for item in range(3):
ID = input('账户:')
for id in IDlist:
if ID==id[0]:
PASS = input('密码:')
if PASS==id[1]:
print("登录成功")
exit()
else:
print("密码错误")
break
else:
print('账户不存在,请重新输入!')
else:
print("账户不存在")
运行截图:
二、元组
元组:带了紧箍咒的列表
t.count(value)–>int
返回value在元组中出现的次数;
t.index(value)
返回value在元组中的偏移量(即索引值)
补充: is和==的区别
1). Python中对象的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。
2). is和==都是对对象进行比较判断作用的,但对对象比较判断的内容并不相同。
3). ==用来比较判断两个对象的value(值)是否相等;(type和value)
is也被叫做同一性运算符, 会判断id是否相同;(id, type 和value)
深拷贝和浅拷贝
赋值(=):如果直接用’='赋值的话就没有拷贝,指向同一片地址空间,改变一个,另一个也会改变
浅拷贝(copy.copy或li.copy()或切片赋值):如果只有一层的话和深拷贝就没有区别,但如果里面窃套了,那么它就会把窃套的数据的地址拷贝,改变原来第一层的值,拷贝后的内容不变(不影响),但改变窃套的内容的话,拷贝后的内容也会跟着变(因为浅拷贝拷过去的是窃套的地址)
深拷贝(copy.deepcopy()):会把里面的内容完全拷贝,不管有没有窃套,改变原来的值也对深拷贝后的内容没影响。
1.元组的创建,删除及特性
-
定义空元组
tuple = () -
定义单个值的元组
tuple = (fentiao,) -
一般的元组
tuple = (fentiao, 8, male)
特性:
连接操作符,重复操作符,成员操作符
索引, 切片
注意: 不能对元组的值任意更改;
特性:
对元组分别赋值,引申对多个变量也可通过元组方式分别赋值
环境变量交换
特性:
对元组分别赋值,引申对多个变量也可通过元组方式分别赋值
x, y, z = 1, 2, ‘westos’ 等价于 (x, y, z) = (1, 2, ‘westos’) , 等号两边的对象都是元组并且元组的小括号是可选的。
深入理解环境变量交换
x=2; y=10;x, y = y, 2; print(x,y)
这种交换方式无需中间变量即可交换两个变量的值。那么具体实现机制是怎样的呢?
实现机制:
1). 构造一个元组(y, x);
2). 构造另一个元组(x, y);
3). 元组(y, x)赋值给(x, y),元组赋值过程从左到右,依次进行.
命名元组
Tuple还有一个兄弟,叫namedtuple。虽然都是tuple,但是功能更为强大。
collections.namedtuple(typename, field_names)
typename:类名称
field_names: 元组中元素的名称
命名元组是一个类,有两种方式来定义命名元组:
实例化命名元组,获得类的一个实例:
访问命名元组: 通过逗号运算符和属性名来访问元组字段的值
user.name; user.age, user.id
命名元组的属性