python字典、list、字符串常见处理方法、元组、文件读写

1.字符串常用方法

name=‘abc’
print(name.capitalize()) #把字符串首字母大写,结果: Abc
print(name.center(100,'-')) #把字符串居中 结果: --------------abc------------其中:abc和‘-’加起来等于100
print(name.index('p'))#找不到下标的时候会报错 结果:报错
print(name.isalnum()) #只能有英文、数字就是合法的 结果:True
print(name.isalpha()) #判断是否只为英文的,汉字也可以 结果:True
 print(name.istitle())#是否为标题,首字母全部为大写时为true  结果:False
以上函数不太常用
重点掌握以下内容:
print(name.count('欢'))#查询次数    结果:0
print(name.endswith('.jpg'))#判断字符串是否以xx结尾 布尔类型的(Ture和False首字符要大写) 结果:False
print(name.startswith('138'))#判断字符串是否以xx开头 结果:False
print(name.upper())#都变成大写的 结果:ABC
print(name.lower())#都变成小写的 结果:abc
print(name.find('p'))#找不到元素的时候不会报错,返回-1 结果-1
print(name[1])#字符串也是可以根据下标来取值的 结果:b
print(name.isdigit())#判断是否为纯数字 结果:False
print(name.isidentifier())#判断是否为合法的变量名 结果:True
print(name.isspace())#判断是否全部为空格 结果False
print(name.strip('xx'))#去掉字符串两边的东西,里边不写值时默认去除空格和换行符 结果:abc
print(name.rstrip())#只去掉右边的 结果:abc
print(name.lstrip())#只去掉左边的 结果:abc
print(name.replace('ab','sad'))#替换字符串,把前边的替换为后边的,写数字时,表示替换几次,不写表示替换全部 结果:sadc
print(name.zfill(5))#数字前边补零,括号里数字表示共多少位,不足时前边补0 结果:00bac
names='''
fdfdf
gdgdg
fsfs
fsfsf
fsfsf
'''
print(names.split())#1.分割字符串 2.把字符串变为list 3.默认以空格和换行符分割的,split后边括号写什么就以什么分割 结果:['fdfdf', 'gdgdg', 'fsfs', 'fsfsf', 'fsfsf']

stus=['da','dada','fdf','fdfd','fdf','fdf','dfdfd']
print('、'.join(stus))#1.把list变成字符串 2.以某个字符串连接 结果:da、dada、fdf、fdfd、fdf、fdf、dfdfd

import string
print(string.ascii_letters) #所有的大写字母和小写字母 结果:abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.ascii_lowercase)#所有的小写字母 结果:abcdefghijklmnopqrstuvwxyz
print(string.ascii_uppercase)#所有的大写字母 结果:ABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.digits)#所有的数字 结果:0123456789
print(string.punctuation)#所有的数字 结果:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
*************************************************************************
a = [1,1,2,3,4,5,6,72]
for i in a:
if i%2!=0:
a.remove(i)
print(a) 结果:[1,2,4,6,72] 原因在删除list第一个元素1时,下次循环开始找第二个元素,但是此时的元素位置已经改变,因此第二次找到的元素为2,将第二个1漏掉了,此方法不可取

可用以下方法进行删除操作:
a = [1,1,2,3,4,5,6,72]
b = a[:]
for i in b:
if i%2!=0:
a.remove(i)
print(a)
*************************************************************
a='hahah'
b=a
print('重新赋值之前的',id(a))
print('重新赋值之前的',id(b)) a、b的地址是一样的
a='dd'
print('重新赋值之后的',id(a))
print('重新赋值之后的',id(b)) a、b的地址不同
****************************************************************
定义变量的方式:

a = b = c = d = 0

e,f,g = 1,2,3

不引入第三方变量的方式把a,b交换过来:
a = 1
b = 2
a = a + b #1+2 3
b = a - b # 3 -2 1
a = a - b # 3-1 2


# b,a = a,b


2.list
stus=['ffs','ggfgf','gfgf','dsds','fdfd','dfdsfs']
for i in range(stus):
print(stus[i]) 按顺序将list中的每个元素取出来;此方法同样适用于字符串,效果相同
结果:
ffs
ggfgf
gfgf
dsds
fdfd
dfdsfs

list切片,list的一种取值方式:
nums=list(string.digits) #字符串强制类型转换为列表:[0,1,2,3,4,5,6,7,8,9]
print(nums)
print(nums[-6:-10:-1])#第二个冒号后边的值代表步长,每隔几个去一次,步长是负数的话,就是从右往左开始取值 结果:['4', '3', '2', '1']
# # 步长为负
# # 前面两个都不写:则取反
# # 写第一个,第二个不写:从第一个向左取
# # 写第二个,第一个不写:从第二个向左取
# # 写两个:开始位置在结束位置的左侧:取不到
# # 写两个:开始位置在结束位置右侧:从右往左取
# #切片同样适用于字符串
print(stus[1:3]) #顾头不顾尾,即取到1、2但不包含3,如果开始下标不写的话,从最前边开始写;如果后边下标不写的话。代表取到最后  结果:['ggfgf', 'gfgf']
print(stus[-1])#-1代表最后一个元素 结果:dfdsfs
print(stus[:])#开头下标和结尾下标都不写,代表取整个list 结果:['ffs', 'ggfgf', 'gfgf', 'dsds', 'fdfd', 'dfdsfs']

3.元组:也是list,但是他是不可变的list
cities=('beijing','shanghai') #一旦定义好就不能再变了
print(cities[0]) 结果:beijing
print(cities.count('beijing')) 返回出现次数,没有不报错。结果:1
print(cities.index('beijing')) 返回下标,没有时报错。结果:0

s='方法','苟富贵' #字符串定义好之后,也不能修改
s[0]='fsds' 结果:报错字符串无法修改
s='ffdfdfsdf' 结果:被修改,此方法是对s重新赋值
s=s.replace('ff','') 结果:dfdfsdf
4.字典
非空即真,非0即真
实现同样的功能,代码越少越牛逼
a = []
b =
'niuhanyang' #not的意思是取反
c = ()
d =
0
e = None
以上只有b是真的

元组都是以key:valuekey:value的形式进行存储的,得到到了key值就可以获取到相应的value;并且字典都是无序的,字典的取值速度也优于list,因为key值是唯一的,不需要挨个查找
jj={
'name':'aa',
'age':11,
}
#增加
jj['qq']=1112555 在字典里增加 qq:1112555
jj.setdefault('fdfds','个梵蒂冈') 字典里增加:fdfds:个梵蒂冈
jj[
'age']=33 已有此key值,更改此对应的value
print(jj)
jj.setdefault(
'age','74') setdefault这种方式,如果key已经存在,那么就不会修改,key不存在的话就新增
print(jj)
#修改
jj['qq']=11125551
#删除
jj.pop('qq') 删除的时候key不存在会报错
del jj['age'] 删除的时候key不存在会报错
#取值
print(jj['name']) 取值的key不存在会报错
print(jj.get('name','fdfd')) 取值的key不存在会返回none,后边指定值时,返回指定值
jj.clear() 清空字典
jj.popitem() 随机删除一个key值

aa={'chouyan':'yibao'}

jj.update(aa)
把一个字典加入到另一个字典
print(jj.keys())    结果:dict_keys(['name', 'age', 'chouyan'])
print(jj.values()) 结果:dict_values(['aa', 11, 'yibao'])
print(jj) 结果:{'name': 'aa', 'age': 11, 'chouyan': 'yibao'}

for
i in jj: #for i in jj:只能打印key值

print(i)

for k,v in jj.items(): 可打印出k,v

print(k,v)
********************************************************
练习:将xiaohong海淀的house变为5 info[
1]['xiaohong']['house']['海淀']+=2
info =  [
{
'xiaohei':
{
'money':10000,
'cars':['Ben-z','audi','BMW'],
'info': {
'phone':186212312,
'age':36,}
}
},
{
'xiaohong':
{
'house': {
'朝阳':2,
'海淀':3,
'昌平':5
},
'lan':['ch','en','jp'],
}
}
]
****************************************
高效循环字典的方式:
d={'a':1,'b':2 }
print(d.items()) 转换成了list,查询效率没有字典高 结果:dict_items([('b', 2), ('a', 1)])成为了两个元组
for k in d:
print(k,d.get(k)) 根据取到的key值,取到value 结果为:b 2 换行 a 1
**************************************************************
练习:统计学生交作业的情况
data={
'aa':{
'2018-6-3':'未交',
'2018-6-4':'已交',
},
'bb': {
'2018-6-3': '未交',
'2018-6-4': '已交',
}
}
#1.判断名字和日期是否都填了
#2.构造好小字典{data:status}
#3.把构造好的小字典和以前那个合并到一起
for i in range(5):
name=input('name:').strip()
date = input('date:').strip()
status = input('status:').strip()
if name and date:
status='已交'if status else '未交' #三元表达式
# if status:
# status ='已交'
# else:
# status='未交'
if name in data: #判断学生是否存在
data[name][date]=status #如果已经存在,就加一个日期和状态
else:
tmp={date:status} #{'2018-1-4':'未交'}
data[name]=tmp #再给大字典加一个学生 value是小字典
print('添加之后的',data)
else:
print('姓名和日期必须写')

5.文件读写
#1.打开文件
#2.读或者写
#3.关闭文件
f=open('111','w+',encoding='utf-8')      其中111为打开文件名,此文件在当前目录下时不需要路径,如果需要输入绝对路径时,格式为r'xxxxxxxxx',w+为文件打开方式,encoding='utf-8为字符集编码
print('readline',f.readline()) #读取文件一行的数据
print('readlines',f.readlines()) #获取文件中的所有数据,每一行的数据放到一个list里边
print('read',f.read())#获取文件中的所有内容
************************************************************************
names=['a','b','c','d','e']
for name in names:
f.write(name+'/n')
f.writelines(names) #传一个list,把list每一个元素写入到文件中

f.write('dsadsa')
print(f.read()) 此时读取不到任何值,因为在写完之后,指针跑到了最后,将无法读取到任何值.


只要和r相关的,文件不存在时会报错;只要是和w相关的文件内容都会被清空;r读模式时,每次指针都在最前边,w写模式的每次覆盖写完指针都会放到最后,a追加模式的在文本最后追加,完成后指针放到最后

只读模式                      写模式                    追加模式
r w a
只能读 会覆盖以前的文件
不能写 里边的内容,不能读
文件不存在会报错 文件不存在时会新建一个

读写模式 写读模式 追加读写模式
r+ w+ a+
打开不存在的文件报错 能读能写,不会清空以前的内容,文件不存在会新建

猜你喜欢

转载自www.cnblogs.com/kuhaha/p/9148162.html
今日推荐