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