1、列表(list)
python中最常见的一种数据类型,用"[]"中括号将元素括起来,逗号分开,列表中的元素是可以进行增删查改等一系列操作的。
# int float str list
s = '王月、张娜、宋雪艳、刘姐、王何、程月香'
# 1 2 3 4 5 6
# 定义列表
stus = ['王月', '张娜', '宋雪艳', '刘姐', '王何', '程月香'] # 下标、角标、索引
# 0 1 2 3 4 5
stu2 = [] # 定义一个空的列表
# 1、新增
stus.append('唐玉亮') # 把元素加到列表的最后
stus.insert(1, '徐静') # 指定位置加入
print(stus)
# 2、修改
stus[0] = '王小月'
print(stus)
# 3、删除
stus.pop() # 默认删除组后一个元素
stus.pop(0) # 删除指定的下标的元素
stus.remove('王何') # 指定元素,删不存在元素报错
del stus[3] # 也可删除
stus.clear() # 清空列表
print(stus)
# 4、取值(根据下标取)
print(stus)
print(stus[0])
print(stus[3])
# 其他的方法
l2 = [1, 54, 77, 2, 3, 15, 1]
l2.reverse()
print(l2)
print(l2.count(1)) # 统计元素出现的次数
print(l2.index(77)) # 找指定元素的索引,不存在报错
l2.sort() # 对list进行排序,默认是升序排序
l2.sort(reverse=True) # 降序,不能直接print
print(l2)
l3 = l2.copy() # 复制一个list
l2.extend(stus) # 合并两个list
print(l2)
(1)list练习
import datetime
today = datetime.datetime.today()
usernames = ['xiaohei', 'xiaobai', 'xiaoming']
passwords = ['123456', '11111', '1']
# 登录
# username = input('username:')
# password = input('password:')
# 欢迎 xxx登录,今天的是时间是xxx。
# 登录错误次数过多,最多登录3次
# 需求分析:
# 1、循环3次
# 2、输入账号和密码
# 3、判断账号是否存在 in count
# 4、根据账号取到账号的下标,然后用下标取到密码
# 5、判断账号/密码是否正确
for i in range(3):
username = input('username:')
if usernames.count(username) > 0:
index = usernames.index(username)
password = passwords[index]
pwd = input('password:')
if password == pwd:
print('欢迎%s登陆,时间是%s' % (username, today))
break
else:
print('密码错误')
else:
print('账号不存在')
else:
print('失败次数过多')
运行结果:
username:xiaohei
password:123456
欢迎xiaohei登陆,时间是2020-08-10 22:51:02.518212
2、字典
# 字典是用来存储一对键值对的数据类型,使用大括号括起来,键值对中间使用冒号分割
# 字典key-value,字典是无序的
# list取值,得挨个找,速度慢
# 字典取值,是直接根据key来查找,速度快
# 一维数组
names = ['name1', 'name2']
phone = ['1111', '1111']
addr = ['xxxx', 'xxxxx']
# 二维数组
infos = [
['name1', '1111', 'beijing'],
['name2', '2222', 'shanghai'],
['ccx', '33333', 'guangzhou']
]
# 数组取值
print(infos[-1][0]) # list下标为-1,代表取最后一个元素,运行结果:ccx
# 字典是用来存储一对键值对的数据类型,使用大括号括起来,键值对中间使用冒号分割
# 字典key-value,字典是无序的
# list取值,得挨个找,速度慢
# 字典取值,是直接根据key来查找,速度快
stu_info1 = {} #定义一个空的字典
stu_info = {
'name': 'ccc',
'phone': '11111111',
'addr': 'bj'
}
print(stu_info)
# 增加
stu_info['age'] = 18 #如果key值已存在,则修改
stu_info.setdefault('qq', '602647962') #如果key值已存在,则保持原样
stu_info['name'] = 'nnn'
stu_info.setdefault('name', 'nnn')
#如果key值不存在,两者没有区别
print(stu_info)
# 修改
stu_info['name'] = 'nnn' # 修改
print(stu_info)
# 删除
stu_info.pop('age') #删除不存在的key值,会报KeyError
del stu_info['name']
print(stu_info)
# 取值
print(stu_info.get('phone')) #取不存在的key值,返回None
print(stu_info['qq']) #取不存在的key值,报KeyError
print(stu_info.get('sex', '女')) #get不到key值,会返回默认值,如果get到值,则默认值不起作用
print(stu_info)
new_stu_info = stu_info.copy() #拷贝到别的字典
stu_info.clear() #清空字典
print(stu_info.keys()) # 所有的key
print(stu_info.values()) # {s1:100,s2:200,s3:300} 所有value
print(stu_info.items()) #把字典变成了一个二维数组
stu_info.update(name='xh', money=5000) #可以修改字段值,也可以新增key-value
print(stu_info)
3、list、字典用len取长度
usernames = ['xiaohei', 'xiaobai', 'xiaoming']
passwords = ['123456', '11111', '1']
print(len(usernames))
d = {'name': 1, 'ses': 0}
print(len(d))
运行结果:
3
2
4、list转换成字典
usernames = ['xiaohei', 'xiaobai', 'xiaoming']
passwords = ['123456', '11111', '1']
d = {} #定义一个空得字典
i = 0
while i < len(usernames): # 0<3,计算下标得方式
username = usernames[i]
password = passwords[i]
d[username] = password
i += 1
print(d)
运行结果:
{'xiaohei': '123456', 'xiaobai': '11111', 'xiaoming': '1'}
5、list和字典都是可以循环的
for i in range(5): # for循环会产生一个list,如:[0,1,2,3,4]
print(i)
d = {'xiaohei': '123456', 'xiaobai': '11111', 'xiaoming': '1'}
for a in d: # 直接循环字典得key
print(a)
运行结果:
0
1
2
3
4
xiaohei
xiaobai
xiaoming
6、取字典的key和value的两种方式
# 取字典的key和value的两种方式
d = {'xiaohei': '123456', 'xiaobai': '11111', 'xiaoming': '1'}
# 第一种:
for key in d: # 循环字典得key
value = d.get(key) # 根据key取value,推荐使用
print('%s->%s' % (key, value))
# 第二种:
for key, value in d.items(): # 效率不高,因为d.items()先把一个字典转成了一个list
print('%s->%s' % (key, value))
运行结果:
xiaohei->123456
xiaobai->11111
xiaoming->1
小例子(二维数组):
#二维数组取值
l = [
['xiaohei', '123456'],
['xiaobai', '11111'],
['xiaoming', '1']
]
for i, j in l: # for后面得变量名就是list里得元素
print(i, j)
运行结果:
xiaohei 123456
xiaobai 11111
xiaoming 1