python--list--字典--切片--元组--深拷贝浅拷贝--字符串常用操作--集合、文件操作(day2)

知识点一、list[]

1 s= 'xiaoming,suhong,zhuhongcai'#字符串,取值不好取
  • #列表,数组,list

1 l = ['xiaoming','suhong','zhuhongcai']#列表取元素是按照编号取(索引,角标,下表)
2         # 0          1         2
3 l4 = [1,2,3,4,['a','b','c']#二维数组
4 l4[4][2] 取值结果是c
5 
6 l5 = [1,2,3,4,['a','b','c',['abc','124','vbf']]#三维数组
7 
8 print(l[-1])#-1 代表最后一个元素
9 print(l[0]) #0 代表第一个元素
  • #1、取值

1 print(l[0])
  • #2.1 append增加元素(在末尾增加一个元素)

1 l.append('洛歆')
2 print(l[3])
  • #2.2 insert指定位置增加,如果添加的指定位置没有,会添加到末尾

1 l.insert(0,'毅熊')
2 print(l[0])
3 
4 l.insert(7,'允非')
5 print(l)
  • #3、修改

l[2] = 'mingyue'
print(l)
  • #4.1 指定下标删除pop

1 l.pop(0)
2 print(l)
3 
4 l.pop(5)
5 print(l)
  • #4.2 指定元素删除remove

1 l.remove('xiaoming')
2 print(l)
  • #4.3 del 指定下标

1 del l [0]
2 print(l)
  • #5 count() 某个元素出现的次数

1 print(l.count('xiaoming'))
  • #6 index() 找一个元素的下标

1 index = l.index('xiaoming')
2 print(index)
  • #7、reverse()反转list

1 l.reverse()
2 print(l)
  • #8、sort()排序

1 l2 = [54,6,14,9,23,56,78]
2 l2.sort()#默认升序
3 print(l2)
4 l2 = [54,6,14,9,23,56,78]
5 l2.sort(reverse=True) #降序
6 print(l2)
注意:
1 l2 = [54,6,14,9,23,56,78]
2 l3 = l2.sort(reverse=True) #sort只是针对l2 排序,不能赋值
3 print('l3...',l3)
结果:

  • #9、clear()清空

1 l.clear()
2 print('l是:',l)
  • #10、extend()

1 l3 = l +l2
2 print('l3是:',l3)#直接 + 就是将两个list合并
3 l.extend(l2)#将l2的元素加入到l中
4 print('l是:',l)
  • #11、list循环

1 students = ['小明','小红','小白']
2 #python 实现
3 for stu in students:
4     print(stu)#直接循环取到list中每个元素
#其他语言实现方式
1 for i in range(len(students)):
2     print(students[i])
    
1 #判断元素存在在list中
2 if '小明' in students: #in 判断是否存在不光可以用list,还可以用在字符串中
3     print("")
4 #判断元素不存在在list中
5 if '小光' not in students:
6     print("不在")
点二、字典
  • #字典 key - value key是唯一的不能重复,取值速度非常快

1 d = {'name':'xiaohong',
2      'sex':'',
3      'adder':'北京',
4      '手机号码':'13323457896'
5      }
  • #1、取值

print(d['name'])
print(d.get('手机号码'))
#当取字典中不存在的值时
print(d['money'])#报错
print(d.get('money',0))#get('money')返回None;get('money',0)返回0,0可以设置其他内容
  • #2、增加

d['money'] = 500
d.setdefault('car','bmw')
print(d)
#增加一个已经存在的key
d['name'] = 'xiaohon'#修改key的值
print('方法一',d)

d.setdefault('sex','你那')#key的值不变
print('方法二',d)
  • #3 修改

1 d['sex'] = 400#key存在修改,key不存在时新增
  • #4、删除

1 result = d.pop('sex')#会返回删除的值
2 print(result)
3 
4 del d['name']#直接删除不会告诉删除的结果
5 print(d)

  • #5 字典循环

1 d =  {
2     "name":"小黑",
3     "grade":"天蝎座",
4     "phone":18612532946,
5     "sex":"",
6     "age":28,
7     "addr":"河南省济源市北海大道32号"
8   }
  • #取字典中的key

1 for i in d:
2     print(i)
  • #取字典中的value

1 for i in d:
2     print(d[i])
  • #取字典中的key和value

1 for i in d:
2     print(i,d[i])
  • #取字典中的key和value,效率最高

1 for k in d:
2     value = d.get(k)
  • # 取字典中的key和value,效率没有上一个高

1 for key,value in d.items():
2     print(key,value)
3 print(d.items())#将字典转成二维数组,所以效率没那么高
结果:dict_items([('name', '小黑'), ('grade', '天蝎座'), ('phone', 18612532946), ('sex', '男'), ('age', 28), ('addr', '河南省济源市北海大道32号')])
if 'id' in d:#如果字典用in来判断,判断的是key是否存在,效率高

if 'id' in d.keys():#判断字典中key 是否存在,效率不高
  • 例子:

 1 #1、输入账号和密码,确认密码注册
 2 #2、如果账号不存在的话,可以注册
 3 #3、两次密码输入一致可以注册
 4 stu1 = [{'username':'xiaohong','password':'12345'},{'username':'xiaohuang','password':'12345'}]#方式一
 5 stu2 = {'xiaohong':'123456','小黄':'345678'}#方式二
 6 
 7 for i in range(3):
 8     username = input('请输入账号')
 9     pwd = input("请输入密码")
10     cpwd = input('请再次输入密码')
11     if username == '' or pwd == '' or cpwd == '':
12         print('输入内容不能为空')
13     elif username in stu2:
14         print('用户已注册')
15     elif pwd != cpwd:
16         print('两次输入密码不一致')
17     else:
18         #stu2[username] = pwd
19         stu2.setdefault(username,pwd )
20         print('注册成功')

 

 1 #登录从字典中取值
 2 #1、写一个登陆的程序,最多登陆失败3次
 3 #2、输入账号 密码,如果登录成功,程序结束,提示 欢迎 xx 登录,
 4 #3、登录失败,重新登陆
 5 #3、要判断输入是否为空
 6 stu1 = [{'username': 'xiaohong', 'password': '12345'}, {'username': 'xiaohuang', 'password': '12345'}]  # 方式一
 7 stu2 = {'xiaohong': '123456', '小黄': '345678'}  # 方式二
 8 
 9 for i in range(3):
10     username = input('请输入账号')
11     pwd = input("请输入密码")
12     if username == '' or pwd == '':
13         print('输入内容不能为空')
14     elif username not in stu2:
15         print('用户不存在,请注册')
16     else:
17         if pwd == stu2[username]:
18             print('欢迎%s登录' %username)
19             break
20         else:
21             print('密码不正确')
22 else:
23     print('最多输入3次')
知识点三、切片
1 l = [1,2,3,5,6,7]
  • #切片是对list范围取值

1 print(l[0:3])#取前3个元素,顾头不顾尾,取下标 0,1,2
2 print(l[:3])#也是取前3个元素
3 print(l[2:])#取下标2之后的数据
4 print(l[:])#全部取值
  • #切片对字符串同样有效

1 s = 'abvds'
2 print(s[2:5])#vds
3 
4 l2 = l[0:7:2]#步长
5 print('步长为2:',l2)#步长不写默认为1,写2步长为2结果是: [1, 3, 6]
6 
7 l3 = l[::-1]#步长-1,从后往前取:[7, 6, 5, 3, 2, 1]
8 l3 = l[-1:-5:-1] #步长-1,前面也要是负数[7, 6, 5, 3]
9 print(l3) 

知识点四、元组

  • #元组

 1 l= (1,2,3,4,5)#元组里的元素不可以修改
 2 print(l[0])#取值
 3 print(l[::2])#切片取值
 4 #字符串和元组的值都不能修改,会报错
 5 l[0] = 3
 6 print(l)
 7 
 8 s= 'abc'
 9 s[0] = 'A'
10 print(s)
  • #元组方法

1 l.index()
2 l.count()

#python 的数据类型可以分成可变数据类型和不可变数据类型
#可变数据类型:list ,字典,
#不可变数据类型 元组,字符串,flout, int,不可变数据类型存在的原因是为了数据安全,比如密码
1 s = (1,)#元组只有一个元素时不认为是元组,需要加逗号
2 print(type(s))#<class 'tuple'>
3 ss= 'abc'
4 print('upper',ss.upper())#upper()方法是将字符串内容变成大写赋给一个变量,字符串本身的内容没有变化
5 print(ss)
  • #删除奇数

1 l = [1,1,2,3,4,5,7,8,9]
2 for i in l:
3 
4     if i%2 != 0:
5         l.remove(i)
6 print(l)
#结果:[1, 2, 4, 7, 8]

#第一次循环 不要循环删除list,会导致下标错乱,解决办法创建两个list,内容一致,l2循环,删除l的元素

1 l = [1,1,2,3,4,5,7,8,9]
2 l2 = [1,1,2,3,4,5,7,8,9]
3 for i in l2:
4     if i%2 != 0:
5         l.remove(i)
6 print(l)
 #结果:[2, 4, 8]

知识点五、深拷贝浅拷贝

l = [1,1,2,3,4,5,7,8,9]
l2 = l
print('l的内存地址是:',id(l))
print('l1的内存地址是:',id(l2))
l.append('xiaoming')
l2.remove(8)
print('l是:',l)
print('l2是:',l2)

 

  •  #浅拷贝  内存地址一致,改变一个list 的元素,另外的list也受到影响

1 import copy
2 print('l1的内存地址是:',id(l2))
3 l.append('xiaoming')
4 l2.remove(8)
5 print('l是:',l)
6 print('l2是:',l2
7 l = [1,1,2,3,4,5,7,8,9]
8 l2 = copy.deepcopy(l)
9 print('l的内存地址是:',id(l)))
  •  #内存地址不变一定是浅拷贝,内存地址改变也可能是浅拷贝,只有copy.deepcopy()是深拷贝,其他都是浅拷贝

 1 l = [1,2,3,4,['a','b','c']]
 2 #l2 = copy.deepcopy(l)#深拷贝
 3 l2 = l.copy()#浅拷贝
 4 print('l',id(l))
 5 print('l2',id(l2))
 6 l[-1].append('abc')
 7 l2.insert(0,'A')
 8 l.append('!!!')
 9 print('l是:',l)
10 print('l2是:',l2)

 1 import copy
 2 l = [1,2,3,4,['a','b','c']]
 3 l2 = copy.deepcopy(l)#深拷贝
 4 #l2 = l.copy()#浅拷贝
 5 l2 = l[:]#切片方式也是浅拷贝
 6 l2 = copy.copy(l)#浅拷贝
 7 print('l',id(l))
 8 print('l2',id(l2))
 9 l[-1].append('abc')
10 l2.insert(0,'A')
11 l.append('!!!')
12 print('l是:',l)
13 print('l2是:',l2)

知识点六、字符串常用方法

 1 s= 'abc'
 2 s.strip()
 3 s.lstrip()
 4 s.rsplit()
 5 s.lower()
 6 s.upper()
 7 s.count()
 8 s.index()#找下标,找不到的元素会报错
 9 s.find()#找下标,找不到的元素会返回-1
10 name = '小黑'
11 a = '你的名字是{}'.format(name)
12 print(a)
13 s = '你的名字是{name}'
14 print(s.format_map({'name':"小白"}))
15 
16 s.isupper()#判断是不是大写字母
17 s.islower()#判断是不是小写字母
18 s.isdigit()#判断返回是不是数字
19 
20 s.endswith()#判断是以什么结尾
21 s.startswith()#判断是以什么开头
22 s.isalpha()#如果是字母和汉字返回True,
23 s.isalnum()#如果是字母,汉字和数字返回True,只要不包含特殊字符都返回True
24 s.isspace()#判断是不是空格
25 s.istitle()#判断是否是标题,判断的标准是:判断英文开头是不是大写
26 s.capitalize()#把首字母变成大写
27 s.title()#把所有的英文单词第一个字母变成大写
28 s.center()#把字符串居中

1 s = '欢迎登录'
2 print(s.center(50,'*'))
3 #结果是
4 ***********************欢迎登录***********************
5 
6 s= '5'
7 print(s.zfill(3))#填充
#结果
005
1 s = 'abcaas'
2 ss = s.replace('a','A',2)#替换
3 print('ss',ss)
4 print('s',s)
结果是:
ss AbcAas
s abcaas
1 s = 'suhong,xiaoming,chouhong,suhong'
2 #按照指定元素字符串分割
3 result = s.split(',')#不能传空字符串,会报错
4 print(result)
结果:['suhong', 'xiaoming', 'chouhong', 'suhong']
 1 import pprint
 2 l = ['a','b','c']#想要abc
 3 pprint.pprint(str(l))#结果:"['a', 'b', 'c']"
 4 #join 用规定的字符连接字符串
 5 pprint.pprint(''.join(l))#结果:'abc'
 6 pprint.pprint(''.join(l))#结果:'a,b,c'
 7 s = 'hhaaahh'
 8 pprint.pprint('-'.join(s))#结果:'h-h-a-a-a-h-h'
 9 t = ('a','b','c')
10 pprint.pprint('-'.join(t))#'a-b-c'
11 
12 d = {'name':'xiaoming','sex':'n'}
13 pprint.pprint('-'.join(d))#结果:'name-sex'
14 
15 l3 = [1,2,3,4]
16 pprint.pprint('-'.join(l3))#报错,连接需要时字符串,不能是int,不能嵌套
  • 列表生成式

 1 l = [1,2,3,4,5]
 2 #方法一
 3 l2 = [ str(i) for i in l ] #这一行代码和下面2行是一样的
 4 #方法二
 5 l2 = []
 6 for i in l:
 7     l2.append(str(i))
 8     
 9 #方法一
10 l3 = [ i for i in range(10) if i%2==0 ]#这一行代码和下面4行效果是一样的
11 #方法二
12 l3=[]
13 for i in range(10):
14     if i%2==0:
15         l3.append(i)
16 
17 print(l3)

知识点七、文件操作

  • 1、读文件

1 f = open('a.txt',encoding='utf-8')#打开文件
2 result = f.read()#读文件
3 print(result)
4 f.close()#关闭文件
  • 2、写文件

1 f= open('a.txt','w',encoding='utf-8')
2 f.write('hello'+'\n')#写的时候会清空原来的文件
3 f.write('wangruiji'+'\n')#\n 换行符
4 f.close()
注意:f = open(r'c:\users\niuhanyang\a.txt')#加r不会被转译成\n,或者用\\替代\
  • 3、循环写文件

1 f = open('a.txt','w',encoding='utf-8')
2 l = ['abc','123','abc1']
3 for i in l:
4     f.write(i+'\n')
5 f.close() 

知识点八、集合

  • #集合天生去重

1 s = {1,2,3,1,2,3}#有元素的集合
2 s2 = set() #空集合
3 
4 l = [1,2,2,3,4,5,4]
5 print(set(l))#set(l)将list转换成集合,结果会去重
6 print(s)
  • #关系测试

  • #集合是无序的

 1 a = {1,2,3}
 2 b = {3,4,5}
 3 
 4 print(a & b) #取交集
 5 print(a.intersection(b)) #取交集
 6 
 7 print(a.union(b)) #并集,把两个集合合并到一起,然后取掉重复的
 8 print(a|b)#并集
 9 
10 print( a - b ) #差集,在a集合里面存在,但是在b集合里面没有的
11 print( a.difference(b))#差集
12 a.add('123')#增加,
13 a.remove('232')#删除

 

 
posted @ 2019-09-16 17:39  洛歆陌离  阅读(264)  评论(0编辑  收藏  举报