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

知识点一、list[]
s= 'xiaoming,suhong,zhuhongcai'#字符串,取值不好取

#列表,数组,list
l = ['xiaoming','suhong','zhuhongcai']#列表取元素是按照编号取(索引,角标,下表)
# 0 1 2
l4 = [1,2,3,4,['a','b','c']#二维数组
l4[4][2] 取值结果是c

l5 = [1,2,3,4,['a','b','c',['abc','124','vbf']]#三维数组

print(l[-1])#-1 代表最后一个元素
print(l[0]) #0 代表第一个元素

#1、取值
print(l[0])
#2.1 append增加元素(在末尾增加一个元素)
l.append('洛歆')
print(l[3])
#2.2 insert指定位置增加,如果添加的指定位置没有,会添加到末尾
l.insert(0,'毅熊')
print(l[0])

l.insert(7,'允非')
print(l)
#3、修改

l[2] = 'mingyue'
print(l)

#4.1 指定下标删除pop
l.pop(0)
print(l)

l.pop(5)
print(l)
#4.2 指定元素删除remove
l.remove('xiaoming')
print(l)
#4.3 del 指定下标
del l [0]
print(l)

#5 count() 某个元素出现的次数
print(l.count('xiaoming'))

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

#7、reverse()反转list
l.reverse()
print(l)

#8、sort()排序
l2 = [54,6,14,9,23,56,78]
l2.sort()#默认升序
print(l2)
l2 = [54,6,14,9,23,56,78]
l2.sort(reverse=True) #降序
print(l2)

注意:
l2 = [54,6,14,9,23,56,78]
l3 = l2.sort(reverse=True) #sort只是针对l2 排序,不能赋值
print('l3...',l3)

结果:

#9、clear()清空
l.clear()
print('l是:',l)
#10、extend()
l3 = l +l2
print('l3是:',l3)#直接 + 就是将两个list合并
l.extend(l2)#将l2的元素加入到l中
print('l是:',l)
#11、list循环
students = ['小明','小红','小白']
#python 实现
for stu in students:
print(stu)#直接循环取到list中每个元素
#其他语言实现方式
for i in range(len(students)):
print(students[i])

#判断元素存在在list中
if '小明' in students: #in 判断是否存在不光可以用list,还可以用在字符串中
print("在")
#判断元素不存在在list中
if '小光' not in students:
print("不在")
点二、字典
#字典 key - value  key是唯一的不能重复,取值速度非常快

d = {'name':'xiaohong',
'sex':'女',
'adder':'北京',
'手机号码':'13323457896'
}

#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 修改
d['sex'] = 400#key存在修改,key不存在时新增

#4、删除
result = d.pop('sex')#会返回删除的值
print(result)

del d['name']#直接删除不会告诉删除的结果
print(d)
#5 字典循环
d =  {
"name":"小黑",
"grade":"天蝎座",
"phone":18612532946,
"sex":"男",
"age":28,
"addr":"河南省济源市北海大道32号"
}
#取字典中的key
for i in d:
print(i)
#取字典中的value
for i in d:
print(d[i])
#取字典中的key和value
for i in d:
print(i,d[i])
#取字典中的key和value,效率最高
for k in d:
value = d.get(k)
# 取字典中的key和value,效率没有上一个高
for key,value in d.items():
print(key,value)
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、输入账号和密码,确认密码注册
#2、如果账号不存在的话,可以注册
#3、两次密码输入一致可以注册
stu1 = [{'username':'xiaohong','password':'12345'},{'username':'xiaohuang','password':'12345'}]#方式一
stu2 = {'xiaohong':'123456','小黄':'345678'}#方式二

for i in range(3):
username = input('请输入账号')
pwd = input("请输入密码")
cpwd = input('请再次输入密码')
if username == '' or pwd == '' or cpwd == '':
print('输入内容不能为空')
elif username in stu2:
print('用户已注册')
elif pwd != cpwd:
print('两次输入密码不一致')
else:
#stu2[username] = pwd
stu2.setdefault(username,pwd )
print('注册成功')
 
 
#登录从字典中取值
#1、写一个登陆的程序,最多登陆失败3次
#2、输入账号 密码,如果登录成功,程序结束,提示 欢迎 xx 登录,
#3、登录失败,重新登陆
#3、要判断输入是否为空
stu1 = [{'username': 'xiaohong', 'password': '12345'}, {'username': 'xiaohuang', 'password': '12345'}]  # 方式一
stu2 = {'xiaohong': '123456', '小黄': '345678'} # 方式二

for i in range(3):
username = input('请输入账号')
pwd = input("请输入密码")
if username == '' or pwd == '':
print('输入内容不能为空')
elif username not in stu2:
print('用户不存在,请注册')
else:
if pwd == stu2[username]:
print('欢迎%s登录' %username)
break
else:
print('密码不正确')
else:
print('最多输入3次')

知识点三、切片
l = [1,2,3,5,6,7]
#切片是对list范围取值
print(l[0:3])#取前3个元素,顾头不顾尾,取下标 0,1,2
print(l[:3])#也是取前3个元素
print(l[2:])#取下标2之后的数据
print(l[:])#全部取值

#切片对字符串同样有效
s = 'abvds'
print(s[2:5])#vds

l2 = l[0:7:2]#步长
print('步长为2:',l2)#步长不写默认为1,写2步长为2结果是: [1, 3, 6]

l3 = l[::-1]#步长-1,从后往前取:[7, 6, 5, 3, 2, 1]
l3 = l[-1:-5:-1] #步长-1,前面也要是负数[7, 6, 5, 3]
print(l3)
知识点四、元组
 
 
#元组
l= (1,2,3,4,5)#元组里的元素不可以修改
print(l[0])#取值
print(l[::2])#切片取值
#字符串和元组的值都不能修改,会报错
l[0] = 3
print(l)

s= 'abc'
s[0] = 'A'
print(s)
#元组方法
l.index()
l.count()

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

#删除奇数
l = [1,1,2,3,4,5,7,8,9]
for i in l:

if i%2 != 0:
l.remove(i)
print(l)#结果:[1, 2, 4, 7, 8]
#第一次循环 不要循环删除list,会导致下标错乱,解决办法创建两个list,内容一致,l2循环,删除l的元素
l = [1,1,2,3,4,5,7,8,9]
l2 = [1,1,2,3,4,5,7,8,9]
for i in l2:
if i%2 != 0:
l.remove(i)
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也受到影响

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

 

 
 

 #内存地址不变一定是浅拷贝,内存地址改变也可能是浅拷贝,只有copy.deepcopy()是深拷贝,其他都是浅拷贝

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

 

 

 

import copy
l = [1,2,3,4,['a','b','c']]
l2 = copy.deepcopy(l)#深拷贝
#l2 = l.copy()#浅拷贝
l2 = l[:]#切片方式也是浅拷贝
l2 = copy.copy(l)#浅拷贝
print('l',id(l))
print('l2',id(l2))
l[-1].append('abc')
l2.insert(0,'A')
l.append('!!!')
print('l是:',l)
print('l2是:',l2)
知识点六、字符串常用方法
s= 'abc'
s.strip()
s.lstrip()
s.rsplit()
s.lower()
s.upper()
s.count()
s.index()#找下标,找不到的元素会报错
s.find()#找下标,找不到的元素会返回-1
name = '小黑'
a = '你的名字是{}'.format(name)
print(a)
s = '你的名字是{name}'
print(s.format_map({'name':"小白"}))

s.isupper()#判断是不是大写字母
s.islower()#判断是不是小写字母
s.isdigit()#判断返回是不是数字

s.endswith()#判断是以什么结尾
s.startswith()#判断是以什么开头
s.isalpha()#如果是字母和汉字返回True,
s.isalnum()#如果是字母,汉字和数字返回True,只要不包含特殊字符都返回True
s.isspace()#判断是不是空格
s.istitle()#判断是否是标题,判断的标准是:判断英文开头是不是大写
s.capitalize()#把首字母变成大写
s.title()#把所有的英文单词第一个字母变成大写
s.center()#把字符串居中

s = '欢迎登录'
print(s.center(50,'*'))
#结果是
***********************欢迎登录***********************

s= '5'
print(s.zfill(3))#填充
#结果
005
s = 'abcaas'
ss = s.replace('a','A',2)#替换
print('ss',ss)
print('s',s)
结果是:
ss AbcAas
s abcaas
s = 'suhong,xiaoming,chouhong,suhong'
#按照指定元素字符串分割
result = s.split(',')#不能传空字符串,会报错
print(result)
结果:['suhong', 'xiaoming', 'chouhong', 'suhong']
import pprint
l = ['a','b','c']#想要abc
pprint.pprint(str(l))#结果:"['a', 'b', 'c']"
#join 用规定的字符连接字符串
pprint.pprint(''.join(l))#结果:'abc'
pprint.pprint(','.join(l))#结果:'a,b,c'
s = 'hhaaahh'
pprint.pprint('-'.join(s))#结果:'h-h-a-a-a-h-h'
t = ('a','b','c')
pprint.pprint('-'.join(t))#'a-b-c'

d = {'name':'xiaoming','sex':'n'}
pprint.pprint('-'.join(d))#结果:'name-sex'

l3 = [1,2,3,4]
pprint.pprint('-'.join(l3))#报错,连接需要时字符串,不能是int,不能嵌套
列表生成式
l = [1,2,3,4,5]
#方法一
l2 = [ str(i) for i in l ] #这一行代码和下面2行是一样的
#方法二
l2 = []
for i in l:
l2.append(str(i))

#方法一
l3 = [ i for i in range(10) if i%2==0 ]#这一行代码和下面4行效果是一样的
#方法二
l3=[]
for i in range(10):
if i%2==0:
l3.append(i)

print(l3)

知识点七、文件操作
1、读文件
f = open('a.txt',encoding='utf-8')#打开文件
result = f.read()#读文件
print(result)
f.close()#关闭文件
2、写文件
f= open('a.txt','w',encoding='utf-8')
f.write('hello'+'\n')#写的时候会清空原来的文件
f.write('wangruiji'+'\n')#\n 换行符
f.close()
注意:f = open(r'c:\users\niuhanyang\a.txt')#加r不会被转译成\n,或者用\\替代\
3、循环写文件
f = open('a.txt','w',encoding='utf-8')
l = ['abc','123','abc1']
for i in l:
f.write(i+'\n')
f.close()
知识点八、集合
#集合天生去重
s = {1,2,3,1,2,3}#有元素的集合
s2 = set() #空集合

l = [1,2,2,3,4,5,4]
print(set(l))#set(l)将list转换成集合,结果会去重
print(s)

#关系测试
#集合是无序的
a = {1,2,3}
b = {3,4,5}

print(a & b) #取交集
print(a.intersection(b)) #取交集

print(a.union(b)) #并集,把两个集合合并到一起,然后取掉重复的
print(a|b)#并集

print( a - b ) #差集,在a集合里面存在,但是在b集合里面没有的
print( a.difference(b))#差集
a.add('123')#增加,
a.remove('232')#删除



转载于:https://www.cnblogs.com/luoxinmoli/p/11512858.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值