1.
1)列表的增删改查
stus = ['1','2','3']
#增
stus.insert(0,'茄茄')
stus.insert(9,"茄茄1") #序号超出序列长度,默认加到最后
stus.insert(-1,"茄茄2") #这里需注意,-1默认插到最后一个。
print(stus)
#删
stus.pop() #传参:下标;默认删除最后1个元素;若指定下标,则删除指定元素;若指定的下标不存在,报错。
stus.pop(1)
print(stus.pop()) #返回删除的值
stus.remove("1") #传参:元素;删除list中指定的元素,如果有多个删除第1个;无返回值。
del stus[0] #删除指定下标的元素
stus.clear() #清空lis
#改
stus[0] = 'qieqie'
print(stus)
#查看
print(stus)
print(stus[-1])
print(stus.count("茄茄")) #查找某个元素在列表中出现的次数,如果不存在,返回0
print(stus.index("茄茄")) #查找某个元素的下标,如果有多个元素,返回第一个元素下标;如果查找的元素不存在,运行时会报错
2)列表的其它方法
stus.reverse() #反转list print(stus) stus.sort() #默认升序;字符串按ASCII码排,数字按大小排。 num = [9,31,345,367,299,789,100] num.sort() #排序有个前提:元素必须都是同类型的才能排序成功。 num.sort(reverse=True) #按降序排
3)多维列表
all_nums = [123,456,[789,11,10]] three = [123,456,[789,11,10,["hahaha",'1234']]] print(three[-1][-1][0]) #取元素hahaha all_nums.extend(three) #合并2个list,把three加在all_nums后面 print(all_nums)
4)切片:list取值的一种方式,顾头不顾尾
1 nums = [1,2,3,4,4,5,6,7,8] 2 print(nums[::2]) 3 print(nums[:6])#如果切片前面一个值不写的话,从开头取 4 print(nums[3:])##如果切片后面的值不写的话,取到末尾 5 print(nums[:])#如果前面的值和后面的值都不写的话,全取过来 6 7 print(nums[::-1]) #步长是负数,从右往左取;反之从左往右取 8 #特殊情况 9 print(nums[0:8:-1]) #这样取出来的是空,因为步长为负数,从右往左查找,找不到下标0和8 10 切片同样适用于字符串,字符串也有下标 11 title = "今天发苹果" 12 print(title[:4]) 13 #对于1个list,既要取下标又要取元素值,就可以用enumerate 14 for i,v in enumerate(title): 15 print("%s:%s"%(i,v))
5)综合练习题:
1 #注册:username,passwd 2 all_users = [] 3 while True: 4 username = input("请输入用户名:") 5 if username not in all_users: 6 #if all_users.count(username) == 0: 7 passwd = input("请输入密码:") 8 all_users.append(username) 9 print("注册成功") 10 else: 11 print("该用户名已注册")
6)元组:是一种特殊的list,只能查,不能增删改
1 a = (1) 2 b = ('ssss') 3 c = (1,2,3,4) 4 print(c) 5 print(c[0:3]) #元组也能使用切片 6 mysql = ('127.0.0.1','3307','my','root','123456') 7 mysql.count('my') #计数 8 mysql.index('my') #返回元素下标
7)非空/None即真;非0即真
1 a = '' 2 b = 11 3 if a: 4 print("真") 5 else: 6 print("假") 7 if b: 8 print("真") 9 else: 10 print("假")
2.
1)字典:取值方便,速度快
dict={ 'name':'qieqie', 'age':'18', 'sex':'女', 'addr':'昌平区', 'money':'20K', 'huazhuagnpin':{ '神仙水':80000 } } #dict[0]['jinku']['$'] dict = { 'name': 'qieqie', 'age': '18', 'sex': '女', 'addr': '昌平区', 'money': '20K', "bag":{ "lv":10 } dict = { 'name': 'qieqie', 'age': '18', 'sex': '女', 'addr': '昌平区', 'money': '20K' } stus = { 'ybq':{ 'name': 'qieqie', 'age': '18', 'sex': '女', 'addr': '昌平区', 'money': '20K', "jinku":{ '建行卡':80000, '工行卡':800000, '招行卡':8000000 } } } #两种取和方式 sumall = 0 for i in stus['ybq']['jinku'].values(): sumall+=i print(sumall) print(sum(stus['ybq']['jinku'].values())) #易错点 print(stus['ybq']['jinku'].values()[0]) #这种写法会报错TypeError: 'dict_values' object does not support indexing dict_values([80000, 800000, 8000000]) #这种直接用下标取值会报错,但是可以直接循环 print(dict.get('namme1')) #增 d['shengao']=198 d.setdefault('weight',130) #d.setdefault(key[,default])如果键值在字典中,返回该键对应的值;如果不在,返回default的值,默认为None #删除字段的值 dict.pop('age') #删除指定的key和它的value print(dict) dict.popitem() #随机删除1个 print(dict) del dict['age'] #删除字典指定key和它的value dict.clear() #清空字典 #修改字典的值 dict['age'] = 20 #如果此key存在,修改它的值,如果不存在,新增1个元素 print(dict) #查 dict.keys() #获取字典中所有的keys dict.values() #获取字典中所有的values print(dict.items()) #把字典转成二维list数组,效率低 # d.has_key('addr') #python2里面字典有这个方法,有没有这个key if 'addr' in d :#判断key是否在这个字典里 print('addr') #这种遍历方式效率较低 for k,v in dict.items(): print("k=%s,v=%s"%(k,v)) #高效的遍历字段的方法: for k in dict: print(k,dict[k]) print(dict.items())#直接打印看上去像个二维list数组,实际上不是的 print(dict.items()[0])#这种写法会报错,需要先将其强制转换为list res = list(dict.items()) print(res[0])
2)综合练习题
#账号/密码/密码确认 #非空 #已经存在的不能注册 all_user = {} while True: username = input("请输入用户名:").strip() passwd = input("请输入密码:").strip() spasswd = input("请再次输入密码:").strip() if username and passwd and spasswd: if username in all_user: print("用户名已存在") else: if passwd == spasswd: all_user[username]=passwd print("注册成功") break else: print("两次输入的密码不一致") else: print("用户名或密码或确认密码不能为空") #登录程序: #1.非空 #2.如果输入的用户名不存在,要提示 all_user = {'1':'1','2':'2'} while True: name = input("请输入用户名:").strip() pwd = input("请输入密码:").strip() if name and pwd: if name not in all_user.keys(): print("用户名不存在") else: if all_user[name] == pwd: print("恭喜,登录成功") break else: print("用户名或密码有误") else: print("用户名或密码不能为空")
3)小结和需注意的点:
#可变变量:list 字典 #不可变变量:一旦创建,不能修改的变量:元组,字符串 s = 'abcefg' print(s[3]) s[3] = 'd' #这种写法有误 #运行结果为:1 2 4 6 8:循环list时尽量不要做删除操作 li = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9] li = [1, 11, 3, 33, 4, 5, 6, 7, 8, 9] for i in li: if i % 2 != 0: li.remove(i) print(li) #替代方法: li = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9] #li2 = li[:] #深拷贝,内存地址会变 li2 = li #浅拷贝,内存地址不会变 print(id(li)) print(id(li2)) for i in li2: if i % 2 != 0: li.remove(i) print(li)
3. 字符串常用的方法
#字符串的这些方法都不会改变原来字符串的值 name = ' besttest ok1ok ' print(name.strip()) #默认去掉首尾空格和换行符返回一个新的字符串 print(name) new_name= name.strip('ok') #去掉ok #new_name = name.lstrip()#默认去掉左边的空格和换行符 #new_name = name.rstrip()#默认去掉右边的空格和换行符 print(new_name) new_name = name.count('t')#查找指定字符串在字符串中出现的次数 new_name.capitalize() #将字符串首字母大写 name.center(50,'*') # 在字符串左右各加50个* index = name.find('d') #查找某个字符串,返回它的下标,未找到,返回-1 index = name.index('d') #查找某个字符串,返回它的下标,未找到,报错 name.upper()#把所有字母转化为大写 name.lower()#把所有字母转化为小写 file_name = 'a.xlsx' print(file_name.endswith('.xlsx')) #判断一个字符串以***结尾的 sql = 'select,update,delete,insert,drop,create,' print(sql.startswith('select')) #格式化 f = '{name} 欢迎光临' f.format(name = 'qieqie') f1 = '{name} 欢迎 {age}' d = {'name':'qieqie','age':19} f1.format_map(d) #字符串格式化,传进去的是1个字典 #字符串替换 sql1 = 'select * from aa' new_sql = sql1.replace('select','update') print(new_sql) print('aaa'.islower())#判断字符串是否全是小写字母 print('BBB'.isupper())#判断字符串是否全是大写字母 print('aB'.islower()) print('12'.isdigit()) #判断是否是数字 print('abc1'.isalpha()) #判断是否是英文字母 print('ab1'.isalnum())#判断字符串是否包括数字或字母 str = 'a,b,c,d,e,f' str1 = 'a b c' #print(list(str)) #字符串分割方法split() print(str.split(',')) #返回1个list print(str1.split()) #默认按空格分隔,多个空格同理 #字符串拼接方法join() slit = ['a','b','c'] s1 = 'abcd' s2 = ('1','2','3') s3 = {'1':'1','2':'2','3':'3'} #可迭代对象即:可循环对象 res = '*'.join(slit) #被拼接的对象中的元素必须是可迭代对象:可以是字符串,也可以是list,list中必须是字符串;也可以是字典(字典的key value必须是字符串) res1 = '*'.join(s1) res2 = '*'.join(s2) res3 = '*'.join(s3) print(res,res1,res2)
4. 文件操作
#Python3中没有file,只有open() #文件打卡的3种方式: #读:如果文件打开时未指定打开方式,默认为读 #读写模式:r+ :只要有r,文件不存在时会报错,所以要保证文件的存在 #写:w模式会清空原有文件内容,若文件不存在,新建文件 #写读模式:w+: #追加 a :若文件存在,则会追加到文件的末尾;若文件不存在,则新建文件。该模式不能使用read() #追加读写:a+:以读写模式打开,追加在文件末尾,可以用read() f = open('C:\Users\Administrator\Desktop\测试.txt','a+') f.seek(0) #将文件指针移至文件头;移动指针时,只对read好使,对写不好使。 # f.read() 返回的是字符串 # f.readline 读取一行的内容,返回的是字符串 print(f.read()) f.write('nihaoma') print(f.read()) f.seek(0) print(f.read()) #打印出的无 print(f.readline()) print(f.readlines()) # 读取文件中所有的内容,把文件中每一行的内容存在1个list中,每个元素后有 # f.truncate() # 清空文件内容 print(f.read()) print(f.tell()) # 查看文件指针当前的位置 names = ['a','b','c','d'] f.writelines(names) #参数是可迭代对象,list 字符串 字典 f.write(names) #运行会报错,参数必须是字符串
f = open('a.txt','w',encoding='utf-8')
names = ['a','b','c']
# s='dingfei,123456'
# f.write(s)
f.writelines(s)
# for name in names:
# f.write(name)
for name in names:
f.writelines(names)
#f.close() #高效处理文件的方法 fw = open('C:\Users\Administrator\Desktop\测试.txt') for f in fw: #直接循环文件对象,就是循环文件中的每一行 print(f) #f此时为str类型,如果想去掉空格或换行符,或略过空行,用f.strip() ff=f.split(',') print(ff) #不要把打开文件放在循环中