1、列表的创建
列表与数组的区别
数组:存储同一数据类型的集合 score = [10,20,30]
列表:可以存储任意数据类型的集合
- 例:
name = ['tom','bob']
print(type(name)) ##查看 name 的类型
运行结果:
<class 'list'>
- 列表里可以存储不同的数据类型
li = [1,1.2,'hello',True]
print(li)
print(type(li))
运行结果:
[1, 1.2, 'hello', True]
<class 'list'>
- 列表嵌套:列表里的元素也可以为列表(因为列表本身也是一种数据类型)
li1 = [1,1.2,'hello',True,[1,2,3,4,5]]
print(li1)
print(type(li1))
运行结果:
[1, 1.2, 'hello', True, [1, 2, 3, 4, 5]]
<class 'list'>
2、列表的特性
- 索引
name = ['tom','bob','coco','danny']
print(name[0])
print(name[-1])
运行结果:
tom
danny
- 切片
print(name[1:])
print(name[:-1])
print(name[::-1])
运行结果:
['bob', 'coco', 'danny']
['tom', 'bob', 'coco']
['danny', 'coco', 'bob', 'tom']
- 重复
print(name * 3)
运行结果:
['tom', 'bob', 'coco', 'danny', 'tom', 'bob', 'coco', 'danny', 'tom', 'bob', 'coco', 'danny']
- 连接
name = ['tom','bob','coco','danny']
name1 = ['lily','alic']
print(name + name1)
运行结果:
['tom', 'bob', 'coco', 'danny', 'lily', 'alic']
- 成员操作符
print('coco' in name)
print('jinny' in name)
运行结果:
True
False
- 迭代(for循环)
for i in name:
print(i)
运行结果:
tom
bob
coco
danny
- 例表里嵌套列表
- 索引
name2 = [['tom',21],['coco',23],[1,2,3]]
print(name2[0][0]) ###打印name2列表中第一个列表的第一个元素
print(name2[2][1]) ###打印name2列表中第三个列表的第二个元素
运行结果:
tom
2
- 切片
name2 = [['tom',21],['coco',23],[1,2,3]]
print(name2[:][1]) ##打印name2列表中所有元素中的第二个元素
print(name2[::-1][0]) ##逆序输出所有元素中的第一个
print(name2[0][:-1]) ##第一个元素中的显示-1元素前面的元素
运行结果:
['coco', 23]
[1, 2, 3]
['tom']
3、列表的增加
- 1、直接添加
name = ['tom','bob','coco','danny']
print(name + ['jimmy'])
运行结果:
['tom', 'bob', 'coco', 'danny', 'jimmy']
- 2、append:追加 追加一个元素到列表中
name.append('lily')
print(name)
运行结果:
['tom', 'bob', 'coco', 'danny', 'lily']
- 3、extend:拉伸 追加多个元素到列表中
name.extend(['lily','jimmy'])
print(name)
运行结果:
['tom', 'bob', 'coco', 'danny', 'lily', 'jimmy']
- 4、insert:在指定索引位置插入元素
name.insert(1,'lily')
print(name)
运行结果:
['tom', 'lily', 'bob', 'coco', 'danny']
4、列表的删除
- pop:弹出列表元素,并未彻底删除。
- 没有指定时,默认弹出末尾元素
name = ['tom','bob','coco','danny']
a = name.pop()
print(a)
print(name)
运行结果:
danny
['tom', 'bob', 'coco']
- 指定弹出的元素索引
a = name.pop(1)
print(a)
print(name)
运行结果:
bob
['tom', 'coco', 'danny']
- remove:删除指定元素
a = name.remove('bob')
print(name)
print(a)
运行结果:
['tom', 'coco', 'danny']
None ### a 是空的,因为元素已经删除。
- del:关键字 从内存中删除
print(name)
del(name)
print(name)
运行结果:
['tom', 'bob', 'coco', 'danny']
Traceback (most recent call last):
File "/home/kiosk/PycharmProjects/python-test/test_02/列表_03.py", line 27, in <module>
print(name)
NameError: name 'name' is not defined
5、列表的修改
- 通过索引,重新赋值
name = ['tom','bob','coco','danny']
name[1] = 'tina'
print(name)
运行结果:
['tom', 'tina', 'coco', 'danny']
- 通过切片
print(name[:2])
name[:2] = ['timi','kim']
print(name)
运行结果:
['tom', 'bob']
['timi', 'kim', 'coco', 'danny']
6、列表的查看
- 查看出现的次数
name = ['tom','bob','coco','danny','tom','tom']
print(name.count('tom'))
print(name.count('kim'))
print(name.count('bob'))
运行结果:
3
0
1
- 查看指定元素的索引值(可以指定索引范围查看)
name = ['tom','bob','tom','coco','danny','tom']
print(name.index('bob'))
print(name.index('tom')) ##当列表中出现多个相同的元素时,默认查找的是从左起第一个元素的索引值
print(name.index('tom',1,3)) ##指定索引范围查找元素的索引值
运行结果:
1
0
2
7、列表的排序
列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的。
sorted返回一个有序的副本,并且类型总是列表
- 按照ASCII码排序
name = ['tom','bob','tom','coco','danny','tom']
name.sort()
print(name)
运行结果:
['bob', 'coco', 'danny', 'tom', 'tom', 'tom']
name = ['Tom','bob','Coco','danny',]
name.sort()
print(name)
运行结果:
['Coco', 'Tom', 'bob', 'danny']
- random.shuffle :将默认原顺序打乱
import random
li = list(range(10))
print(li)
random.shuffle(li)
print(li)
运行结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[4, 2, 3, 7, 8, 0, 1, 5, 9, 6]
8、列表的示例练习
- 例1
"""
# _*_coding:utf-8 _*_
Name:列表_04.py
Date:4/2/19
Author:LiMin-wsp
Connect:314690259@qq.com
Desc:
"""
"""
假定有下面的列表:
names = ['fentiao','fendai','fensi','apple']
输出结果为: 'I have fentiao, fendai, fensi and apple.'
"""
names = ['fentiao','fendai','fensi','apple']
names1=','.join(names[:-1])
print('I have ' + names1 + ' and ' + names[-1] + '.')
运行结果:
I have fentiao, fendai, fensi and apple.
- 例2:用户登陆信息管理
- 第一种方法:
"""
# _*_coding:utf-8 _*_
Name:列表_05.py
Date:4/2/19
Author:LiMin-wsp
Connect:314690259@qq.com
Desc:
"""
"""
1.系统里面有多个用户,用户的信息目前保存在列表里面
users = ['root','westos']
passwd = ['123','456']
2.用户登陆(判断用户登陆是否成功
1).判断用户是否存在
2).如果存在
1).判断用户密码是否正确
如果正确,登陆成功,推出循环
如果密码不正确,重新登陆,总共有三次机会登陆
3).如果用户不存在
重新登陆,总共有三次机会
"""
users = ['root','westos']
passwd = ['123','456']
num = 0
n = len(users)
while num <3:
inusers = input('请输入用户名: ')
if inusers not in users:
print('该用户不存在!')
print('你还有%d次机会' %(2-num))
num += 1
else:
password = input('请输入密码: ')
for i in range(n):
if inusers == users[i] and password == passwd[i]:
print('密码正确,欢迎登陆')
exit()
else:
print('密码错误,你还有%d次机会' %(2-num))
num += 1
else:
print('你已经超过三次机会,请稍后重试!')
- 第二种方法:
users = ['root','westos']
passwds = ['123','456']
#尝试登录的次数
trycount = 0
while trycount < 3:
#接收用户输入
inuser = input('用户名:')
#尝试次数加1
trycount += 1
if inuser in users:
inpasswd = input('密码:')
#先找出用户对应的索引值
index = users.index(inuser) ##index为索引值
passwd = passwds[index]
if inpasswd == passwd:
print('%s登录成功' %(inuser))
break
else:
print('%s登录失败:密码错误' %(inuser))
print('你还有%d次机会' %(3-trycount))
else:
print('用户%s不存在' %inuser)
print('你还有%d次机会' % (3 - trycount))
else:
print('尝试次数超过三次,请稍后登录...')
运行结果:
用户名:123
用户123不存在
你还有2次机会
用户名:westos
密码:233
westos登录失败:密码错误
你还有1次机会
用户名:root
密码:123
root登录成功
- 例3:后台会员信息管理
"""
# _*_coding:utf-8 _*_
Name:列表_06.py
Date:4/2/19
Author:LiMin-wsp
Connect:314690259@qq.com
Desc:
"""
"""
# 1. 后台管理员只有一个用户: admin, 密码: admin
# 2. 当管理员登陆成功后, 可以管理前台会员信息.
# 3. 会员信息管理包含:
# 添加会员信息
# 删除会员信息
# 查看会员信息
# 退出
- 添加用户:
1). 判断用户是否存在?
2). 如果存在, 报错;
3). 如果不存在,添加用户名和密码分别到列表中;
- 删除用户
1). 判断用户名是否存在
2). 如果存在,删除;
3). 如果不存在, 报错;
"""
print("管理员登陆".center(50,'*'))
name = input('用户名:')
passwd = input('密码:')
user = []
password = []
if name == 'admin' and passwd == 'admin':
print("""
操作目录
1)添加会员信息
2)删除会员信息
3)查看会员信息
4)退出
""")
while 1:
char = input('请输入你的选择:')
if char == '1':
print('请输入添加用户的信息!')
inuser = input('用户名:')
if inuser in user:
print('该用户已经存在!!')
else:
inpasswd = input('密码:')
user.append(inuser)
password.append(inpasswd)
print('%s用户添加成功!'%inuser)
elif char == '2':
inuser = input('您要删除的用户:')
if inuser in user:
index = user.index(inuser)
outuser = user.pop(index)
outpasswd = password.pop(index)
print('%s用户删除成功!'%inuser)
else:
print('该用户不存在!!')
elif char == '3':
print('查看会员信息'.center(50, '*'))
print('\t用户名\t密码')
UserCount = len(user)
for i in range(UserCount):
print('\t%s\t%s' % (user[i], password[i]))
elif char == '4':
exit()
else:
print('用户名和密码错误,请重新登陆。')
运行结果:
**********************管理员登陆***********************
用户名:admin
密码:admin
操作目录
1)添加会员信息
2)删除会员信息
3)查看会员信息
4)退出
请输入你的选择:2
您要删除的用户:e
该用户不存在!!
请输入你的选择:1
请输入添加用户的信息!
用户名:ad
密码:aa
ad用户添加成功!
请输入你的选择:1
请输入添加用户的信息!
用户名:ad
该用户已经存在!!
请输入你的选择:3
**********************查看会员信息**********************
用户名 密码
ad aa
请输入你的选择:1
请输入添加用户的信息!
用户名:gg
密码:123
['ad', 'gg']
gg用户添加成功!
请输入你的选择:2
您要删除的用户:ww
该用户不存在!!
请输入你的选择:gg
请输入你的选择:2
您要删除的用户:gg
['ad']
gg用户删除成功!
请输入你的选择:3
**********************查看会员信息**********************
用户名 密码
ad aa
请输入你的选择:4
- 例4:栈的工作原理
"""
# _*_coding:utf-8 _*_
Name:列表_07.py
Date:4/2/19
Author:LiMin-wsp
Connect:314690259@qq.com
Desc:
"""
"""
栈的工作原理
入栈
出栈
查看栈顶元素
栈的长度
栈是否为空
"""
zhan = []
info = """
栈操作
1.入栈
2.出栈
3.查看栈顶元素
4.栈的长度
5.栈是否为空
q.退出
"""
print(info)
while 1:
char = input('请输入你的操作:')
if char == '1':
item = input('请输入入栈元素: ')
zhan.append(item)
print('%s元素入栈成功!' %item)
elif char == '2':
if len(zhan) == 0:
print('栈为空,没有元素出栈!!')
else:
item = zhan.pop(-1)
print('%s元素出栈成功' %item)
elif char == '3':
if len(zhan) == 0:
print('栈为空,没有元素!!')
else:
print('栈顶元素为%s'%zhan[-1])
elif char == '4':
print('栈的长度为:%s'%len(zhan))
elif char == '5':
if len(zhan) == 0:
print('栈为空!')
else:
print('栈不为空!')
elif char == 'q':
exit()
else:
print('请输入正确的操作。')
运行结果:
栈操作
1.入栈
2.出栈
3.查看栈顶元素
4.栈的长度
5.栈是否为空
q.退出
请输入你的操作:1
请输入入栈元素: 23
23元素入栈成功!
请输入你的操作:44
请输入正确的操作。
请输入你的操作:rr
请输入正确的操作。
请输入你的操作:3
栈顶元素为23
请输入你的操作:2
23元素出栈成功
请输入你的操作:4
栈的长度为:0
请输入你的操作:5
栈为空!
请输入你的操作:q