【引言】python提供了4个内置数据结构,可以用来保存任何对象集合,它们分别是列表、元组、字典和集合。python有两个有序的集合数据结构(列表和元组),列表是其中之一。
1. 列表的概念
列表是一个有序的可变对象索引集合,列表中的每个对象从0开始编号。
与数组不同的是:
1)列表是异构的。可以在一个列表中存放不同类型的对象 ,且不需要预声明所有存储的对象的类型
2)列表是动态的。可以根据需要扩展和收缩,使用列表存储任何对象之前不需要预声明列表的大小
3)列表是可变的。可以在任何时间通过增加、删除或者修改对象来修改列表。
2. 列表的创建
列表总是用中括号包围,并且列表中包含的对象之间总是用逗号分隔。列表的创建有两种方式,一种是按字面创建另一种是在代码中为列表追加或者扩展对象。如下图就是字面创建。
也可以在运行时“扩展列表”。列表提供了一组内置方法,可以用来处理列表的对象。要调用一个方法,可以使用点记法语法:在列表名后面加一个点号和方法调用。对于现在来说,我们先使用append方法在创建的空列表末尾增加对象。
3. 列表的特性
1)索引
service = ['http','ssh','ftp']
print(service[0]) //正向索引
print(service[-1]) //反向索引
2)切片
print(service[::-1]) //列表的反转
print(service[1::]) //除了第一个之外的其他元素
print(service[:-1]) //除了最后一个之外的其他元素
3)重复
4)连接
5)成员操作符
如何检查一个列表中是否包含某个对象呢?用“in”来检查。
除了使用in操作符检查一个对象是否包含在一个列表中,还可以使用not in操作符组合来检查一个列表中是否不存在某个对象。
6)列表中嵌套列表
4. 列表的增加
append:追加,追加一个对象到列表中
insert:在索引位置插入对象
extend:拉伸,追加多个对象到列表中
append和extend的区别:
5. 列表的删除
pop:可以根据对象的索引值从列表中删除和返回一个对象。如果调用pop时没有指定索引值,将删除和返回列表中的最后一个对象。如果指定了一个索引值,则会删除和返回那个位置上的对象。如果列表为空或者调用pop时指定了一个不存在的索引值,解释器会产生一个错误。
remove:从列表中删除指定数据值的第一次出现。如果在列表中找到了这个数据值,就会从列表中删除包含这个值的对象。如果在列表中没有找到这个数据值,解释器会产生一个错误。
clear:清空列表里面的所有元素
del:(python关键字) 从内存中删除列表或指定对象
6. 列表的修改
通过索引,重新赋值
通过切片
7. 列表的查看
count:查看对象出现的次数
index:查看指定对象的索引值,返回的是指定数据值第一次出现的索引值。也可以指定范围
sort:排序查看(按照ascii码进行排序)
由于字母大小写的ascii码值不一样,所以排序出来大写在小写前面。
对字符串排序不区分大小写的方法如下。
8.列表的复制
方法一.copy()
方法二.切片[:]
9. 列表的练习
1)
2)实现“栈”
info = """
***********数据结构之栈***********
1.入栈
2.出栈
3.栈顶元素
4.栈的长度
5.栈是否为空
q.退出
"""
print(info)
stack = []
while True:
choice = input('请输入你的选择:')
if choice == '1':
item = int(input('请输入你要入栈的元素:'))
stack.append(item)
print("入栈成功,入栈元素为%s" %(item))
print(stack)
elif choice == '2':
if not stack:
print("栈为空,无法出栈")
else:
item = stack.pop()
print("出栈成功,出栈元素为%s" %(item))
print(stack)
elif choice == '3':
if len(stack) == '0':
print("栈为空")
else:
item = stack[-1]
print("栈顶元素为%s" %(item))
elif choice == '4':
print("栈的长度为%s" %(len(stack)))
elif choice == '5' :
if not stack:
print("栈为空")
else:
print("栈不为空")
print(stack)
elif choice =='q' :
break
else:
print("请输入正确的选择")
3)用户管理系统
users = ['potizo', 'zoe']
passwds = ['123', '456']
# 尝试登陆的次数
trycount = 0
while trycount < 3:
inuser = input('用户名:')
inpasswd = input('密码:')
# 尝试次数加1
trycount += 1
if inuser in users:
# 判断用户密码是否正确
index = users.index(inuser)
passwd = passwds[index]
if inpasswd == passwd:
print('%s登陆成功' % (inuser))
break
else:
print('%s登陆失败:密码错误' % (inuser))
else:
print('用户%s不存在' % (inuser))
else:
print('已经超过3次机会了~')
4)判断质数
num = int(input('请输入:'))
if num <= 1:
print('不是质数')
else:
for i in range(2, num):
if num % i == 0:
print('不是质数')
break
else:
print('是质数')
10.序列
成员有序排列的,且可以通过下标偏移量访问到它的一个或者几个成员,这类类型统称为序列。
- 序列数据类型包括:字符串,列表,和元组类型。
- 特点: 都支持下面的特性
- 索引与切片操作符
- 成员关系操作符(in , not in)
- 连接操作符(+) & 重复操作符(*)