1 列表的基本定义
列表是最常用的Python数据类型。
列表的数据项不需要具有相同的类型,可以存储任意的数据类型
序列都可以进行的操作包括索引,切片,加,乘,检查成员等。
序列中的每个元素都分配一个索引,第一个索引是0,第二个索引是1,依此类推
2 列表的创建
创建列表时,列表中的元素以,分隔开来,列表以[ ]括起来
创建列表时也可使用嵌套列表,即一个新的列表由新元素与另外一个列表组成
#列表里:可以储存不同的数据类型
li = [1,1.5,'hello',True]
print(li)
print(type(li))
#列表里也可以嵌套列表(列表也是一种数据类型)
li1 = [1,1.5,'hello',True,[1,2,3,4,5]]
print(li1)
print(type(li1))
3 列表的特性
3.1 索引
service = ['http','ssh','ftp']
#索引
print(service[0]) #从左到右索引第一个元素,http
print(service[-1]) #从右至左索引第一个元素,ftp
3.2 切片
#切片
print(service[1:]) ##除第一个元素以外的为所有元素,['ssh', 'ftp']
print(service[:-1]) ##除最后一个元素以外的所有元素,['http', 'ssh']
print(service[::-1]) ##将列表反转,['ftp', 'ssh', 'http']
3.3 重复: list*n ##n:重复的次数
#重复
print(service * 3) #将列表重复输出3次,['http', 'ssh', 'ftp', 'http', 'ssh', 'ftp', 'http', 'ssh', 'ftp']
3.4 连接:+
#连接
service1 = ['nfs','samba']
print(service + service1) ##输出['http', 'ssh', 'ftp', 'nfs', 'samba']
3.5 成员操作符
in ##判断元素是否属于该列表,存在为真,不存在为假
not in ##判断元素是否不属于该列表,不存在为真,存在为假
#成员操作符
print('nfs' in service)
print('nfs' in service1)
#for循环遍历
for i in service:
print(i)
3.6 列表里嵌套列表时的索引和切片
#列表里嵌套列表
service2 = [['http','80'],['ssh','22'],['ftp','21']]
#索引
print(service2[0][1])
#切片
print(service2[:][1])
print(service2[:-1][0])
输出结果为:
80
['ssh', '22']
['http', '80']
4 列表的操作
4.1 列表的增加:
service = ['http','ssh','ftp']
#1 连接
print(service + ['firewalld'])
#2.append:追加,追加一个元素到列表中
service.append('firewalld')
print(service)
#3.extend:拉伸 追加多个元素到列表中
service.extend(['mysql','firewalld'])
print(service)
#4.insert:在指定索引位置插入元素
service.insert(1,'samba')
print(service)
4.2 列表的删除:
service = ['http','ssh','ftp']
#1.pop():默认删除最后一个元素,删除的元素可被变量吸收
b = service.pop()
a = service.pop(1) #删除指定元素
print(service)
print(b)
print(a)
结果:
[‘http’]
ftp
ssh
#2.remove:删除指定的元素
a = service.remove('ssh')
print(service)
#3.del:删除列表
print(service)
del service
print(service)
4.3 列表的修改:
service = ['http','ssh','ftp']
#通过索引 重新赋值
service[0] = 'mysql'
print(service)
#通过切片
print(service[:2])
service[:2] = ['samba','iscsi']
print(service)
4.4 列表的查看:
service = ['ssh','http','ssh','ftp']
#查看出现的次数
print(service.count('ssh'))
#查看指定元素的索引值
print(service.index('ssh'))
print(service.index('ssh',0,3))
4.5 列表的排序与乱序:
##排序
>>> service = ['http','ftp','ftp','ssh']
>>> service.sort(reverse=True) ##倒叙排列
>>> print(service)
['ssh', 'http', 'ftp', 'ftp']
>>> service.sort() ##正序排列
>>> print(service)
['ftp', 'ftp', 'http', 'ssh']
>>> phone = ['a','k','F','z']
>>> phone.sort(key=str.upper) ##忽略大小写排序
>>> phone
['a', 'F', 'k', 'z']
#随机打乱列表
>>> import random #加载模块
>>> a = list(range(10)) #生成列表
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #列表原来的内容
>>> random.shuffle(a) #打乱列表元素顺序
>>> a
[2, 0, 7, 3, 6, 4, 1, 9, 5, 8] #打乱之后的列表
>>> b = ['c','d','e','f','g'] #列表原来的内容
>>> random.shuffle(b)
>>> b
['c', 'g', 'f', 'e', 'd'] #打乱之后的列表
4.6 python常用内置方法:枚举和zip
之前已经介绍min、max、sum方法,现在再介绍一下枚举和zip
#枚举:返回索引值和对应的value值
for i,v in enumerate('westos'):
print(i,v)
#zip
s1 = 'abc'
s2 = '456'
for i in zip(s1,s2):
print(i)
for i in zip(s1,s2):
print(''.join(i))
输出结果:
0 w
1 e
2 s
3 t
4 o
5 s
('a', '4')
('b', '5')
('c', '6')
a4
b5
c6
5 列表的练习
5.1 练习一:
"""
输入月份判断该月属于哪个季节
"""
month = int(input('Month:'))
if month in [3,4,5]:
print('春季')
elif month in [6,7,8]:
print('夏季')
elif month in [9,10,11]:
print('秋季')
elif month in [12,1,2]:
print('冬季')
else:
print('请输入正确值:')
5.2 练习二:
"""
输入如下格式的日期,判断为该年的第多少天
年月日:YYYY-MM-DD
"""
time = input('请输入日期 YYYY-MM-DD:')
date = time.split('-')
year = int(date[0])
month = int(date[1])
day = int(date[2])
li = [31,28,31,30,31,30,31,31,30,31,30,31]
num = 0
if ((year % 4 ==0) and (year % 100 != 0) or (year % 400 == 0)):
li[1] = 29
for i in range(12):
if month > i + 1:
num += li[i]
else:
num += day
break
print('这一天是%d年的第%d天' %(year,num))
5.3 练习三:
初级用户管理系统:
"""
1.系统里面有多个用户,用户的信息目前保存在列表里面
users = ['root','westos']
passwds = ['123','456']
2.用户登陆(判断用户登陆是否成功
1).判断用户是否存在
2).如果存在
1).判断用户密码是否正确
如果正确,登陆成功,退出循环
如果密码不正确,重新登陆,总共有三次机会登陆
3).如果用户不存在
重新登陆,总共有三次机会
"""
users = ['root','westos']
passwds = ['123','456']
trycount = 0
while trycount < 3:
inuser = input('用户名: ')
inpasswd = input('密码: ')
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次,请稍后...')
添加后台管理员:
"""
1. 后台管理员 admin 密码:admin
2. 管理员才能看到会员信息
3. 会员信息包含
添加会员信息
删除会员信息
查看会员信息
退出
"""
print('管理员登录'.center(50,'*'))
inuser = input('UserName: ')
inpasswd = input('Password: ')
users = ['root','westos']
passwds = ['123','456']
if inuser == 'admin' and inpasswd == 'admin':
print('管理员登录成功')
print('会员管理'.center(50,'*'))
while True:
print("""
菜单
1. 添加会员信息
2. 删除会员信息
3. 查看会员信息
4. 退出
""")
choice = input('请输入您的选择: ')
if choice == '1':
print('添加会员信息'.center(50,'*'))
addUser = input('添加会员名: ')
if addUser in users:
print('%s用户已经存在' %addUser)
else:
addPasswd = input('密码: ')
users.append(addUser)
passwds.append(addPasswd)
print('%s用户添加成功' %addUser)
elif choice == '2':
print('删除会员信息'.center(50,'*'))
delUser = input('删除会员名: ')
delIndex = users.index(delUser)
users.remove(delUser)
passwds.pop(delIndex)
print('%s会员删除成功' %delUser)
elif choice == '3':
print('查看会员信息'.center(50, '*'))
print('\t用户名\t密码')
userCount = len(users)
for i in range(userCount):
print('\t%s\t%s' %(users[i],passwds[i]))
elif choice == '4':
exit()
else:
print('请输入正确选择!')
else:
print('管理员登录失败...')