Python列表,字典和字符串操作

列表:

列表:list, 也叫数组,表现[].
特点:有角标,元素可以重复,有序的元素

例子:
stus = ['王志华','乔美玲','乔美玲','王文文','feixiang']#中括号,这就是一个list;
只有加了引号就是字符串儿(如stus = ‘['王志华','乔美玲','乔美玲','王文文','feixiang']’)
下标:中括号中每个名字的序数,也称角标,索引
元素:列表中各个内容,如王志华
!特别注意,下标是从0开始的。

stus2 = []
stus3 = list()
#都是定义空的list

增加元素(俩种方法,末尾和指定位置)
stus.append('赵燕')#在list末尾增加一个元素
stus.insert(0,'杨静')#在指定下标位置增加元素。
stus.insert(20,'蔡进')如果指定位置不存在,会加在末尾

print('stus的长度是',len(stus))#取元素个数


stus[3] = '蔡康永'#找到下标,直接赋值更改
print('改完之后的',stus)
print(stus[-1])#负表示从后边开始数,用于查找后边数据


删除
stus.pop()#pop默认删除最后一个元素
stus.pop(2)#删除角标为2,即第三为元素
stus.remove('乔美玲')#删除输入的元素
stus.pop(8)#下标8的元素不存在,会报错
stus.remove('乔美')#乔美元素不在列表,会报错
del stus[-1]#也是删除指定的元素
stus.clear()#清空


result= stus.count('乔美玲')#查询输入元素在list里面出现的次数
result= stus.count('乔美')#不存在的元素,会出现0
no = stus.index('乔美玲')#找元素的下标
no2 = stus.index('乔美玲')#list中有俩个或几个,只会返回最前边一个的下标
no3 = stus.index('乔美')#找不在表中元素的下标,会报错
stus.reverse()#反转(转置)
stus.sort()#排序,按字母数字排的,文字没法排
nums = [3,6,2,6,3,9,1]
# nums.sort()
# nums.reverse()
# nums.sort(reverse=True)#排序后又反转,会改变排序方式
nums.extend(stus)#把一个list的元素加入到另一个list
# print(nums)

布尔类型
True False

print(1>2)
if '乔美玲' in stus:#也可以用 if stus.count('乔美玲') is not 0:
print('同学存在')
else:
print('同学不存在')

stus = ['杨静', '王志华', '王银梅', '乔美玲','段鑫琪', '王立文', '赵燕','杨华', '周永波', '杨静']
for s in stus:#列表直接循环,是取的元素。
print('s的值是%s'%s)
如果直接循环一个list,那么每次取值的就是list里边的每个元素。
for i in range(len(stus)):
print(i)

index = 0
while index < len(stus):
print(index)
index += 1
p = xpinyin.Pinyin()
for s in stus:
stu_pinyin = p.get_pinyin(s,'')
print(stu_pinyin)

for i in range(len(stus)):
print('下标是%s,值是%s'%(i,stus[i]))

for index,stu in enumerate(stus):#同时取到下标和值
print('%s ==> %s'%(index,stu))

for index,stu in enumerate(stus,1):#同时取到下标和值,加1取下标从1开始
print('%s ==> %s'%(index,stu))

choice = ['注册','登录','退出','购物']
print('输入编号进入对应的操作')
for index,c in enumerate(choice,1):
print('%s ==> %s'%(index,c))

多维数组
stu2 = [1,2,3,4,['a','b','c',['哈','哈哈']]] #三维数组
print(stu2[4][1])#一层层找,先找到第一层的第4个元素,再第二层的第1个元素,这个结果为b
print(stu2[4][3][1])#一层层找,先找到第一层的第4个元素,再第二层的第3个元素,然后第三层的第一个元素,这个结果为哈哈
stu2[4][3].insert(1,'蔡进')#一层层找,先找到第一层的第4个元素,再第二层的第1个元素
#print(stu2)

切片:list取值的一种方式,它指定范围取值
stu4 = [1,2,3,4,5,6,7,8]
#print(stu4[2:5])#切片取值,顾头不顾尾。即没有取到6.
#print(stu4[:5])#从最前面开始取
#print(stu4[2:8])#取到8,比最后一位的角标大一位
#print(stu4[2:])#取到最后面
#new_stu = stu4[:]#复制了一个新的list
#print(stu4[:])
#print(stu4[0:8:2])#隔一个取一个,2是步长,写的2,实际上跳过了1个。为1时不用跳
#print(stu4[0:8:-1])#变成了空
#print(stu4[::-1])#步长为负数的时候,为从右往左取值
#print(stu4[-1:-9:-2])#前边加数组,且不为负数时,变成了空。
#new_stu = stu4#下节课讲

#下标、切片、长度、循环 同样适用于字符串,但不能修改。
#name = '马上要吃饭了'
#print(name[3],len(name))
#for i in range(len(name)):
# print(i)


字典: 列表很难存储大量信息,用起来也不方便,而且效率很低,就引入了字典。# stus=['王志华','乔美玲','段鑫琪','王立文']# stu_info = [

# ['王志华','18''女''address']
#     ['乔美玲','18''女''address']
# ['段鑫琪','18''女''address']
# ['王立文','18''女''address']
# ]
# for stu in stu_info:
# if stu[1] == "乔美玲":


字典:
#stu_info = {'name':'王志华','age':'18','addr':'北京'}#大括号,字典;是key-value形式
!字典里边的key是唯一的,否则后边的会覆盖前边的;
!元素是乱序的。

取值
# print(stu_info)#取字典
# print(stu_info['name'])#取key为name是的值
# print(stu_info['age'])#取key为age时的值
!jason同字典外观一样,但jason就是字符串儿,只是个格式长得非常像。


# print(stu_info)
# print(stu_info['name'])#查name的value,不存在时会报错
# print(stu_info.get('name',500))#.get后边可以指定不存在时报的结果,会出现500
加.get,当key存在时,跟没get是一样的。
但不存在时,会报None,即空空的,也不报错。但没get的会报错。
# print(stu_info['age'])

修改
# stu_info['addr']='上海'#直接复制修改
# print(stu_info)

新增
#stu_info['phone']='1233434'#key不存在时,会新增 #不安全,存在时会改变phone的值。
# stu_info.setdefault('email','ddd@163.com')#key不存在时会新增,存在时不改变
!stu_info.setdefault('age','19')#key存在时,值不会新定义
# print(stu_info)

删除
#stu_info.pop('phone')
#stu_info.clear()#清空这个字典
#stu_info.popitem()#从字典里面随机删除一个元素
#print(stu_info)
#字典没有顺序

# d1={}
# d2={'a':'v'}
# d1.update(d2)#把d1更新为d2
# print(d1)

# print(stu_info.keys())#取所有的key
# print(stu_info.values())#取所有的value
# print(stu_info.items())#取所有的元素

直接循环字典,看看每次循环的是字典的key
# for k in stu_info:#循环字典,叫啥无所谓,循环的是key
# print(k)

判断
#print('name' in stu_info)#判断这个key存不存在
#print('name' in stu_info.keys())#判断这个key存不存在,需要将所有的key拿出来列表再判断,没上边的快。

#for i in stu_info:#循环字典,叫啥无所谓,循环的是key,比下边的方法快
# s='%s=>%s'%(i,stu_info.get(i))
# print(s)

# for j,v in stu_info.items():#俩个值,取key和value。因为需要列表,所有很慢
# b='%s=>%s'%(j,v)
# print(b)

多维字典:
# stu_info={
# '小明':{'passwd':'123456','phone':'132323','age':'18'},
# '小黑':{'passwd':'223456','phone':'232323','age':'28'}
# }
# print(stu_info['小明']['phone'])#层层定位再取值

d = {
'春波':{
"car":{'BMW':5,'BENZ':3,'audi':3,'byd':4},
"house":["北京",'南京','上海'],
"money":1000000,},
'乔美玲':{
"bag":['xx','lv',],
"house":['三环','4环'],
"hzp":['skii','ysl'],
'language':{
'普通话':10,
'东北话':20,
'日语':0,
'英语':4
}
}
}
#马春波卖了一套上海的房子,卖了500万
# d['春波']['house'].pop(2)
# d['春波']['money']+=5000000
#算一下马春波有多少辆车
#m=d['春波']['car'].values()
#马春波花了100万买了一辆劳斯莱斯

#乔美玲的东北话降级了,从20变成了10

#乔美玲会哪些语言

#print(d)


字符串
t='user1,user2,user3,user4,user5,user6,user7'
print('分隔符',t.split(','))#取列表,按照某个字符来分割字符串儿
print('',t.split())#什么都不传,按空格分开。没有空格就认为是一个元素

cars = ['ad','cd','ef']
print('、'.join(cars))#以某个字符把list中的元素连起来,变成一个字符串儿。跟split全反

s='a... adbDEF'
print(s.strip()) #默认去掉字符串俩边的空格和换行符
new_s = s.strip('.')#加了点,就字符串最俩边的点儿也可以去掉
print(new_s)
print(s.rstrip())#去右边的
print(s.lstrip())#去左边的
print(s.count('.'))#某个字符串出现的次数
print(s.index('a'))#找某个字符串下标,不存在会报错
print(s.find('c'))#找某个字符串下标,不存在会返回-1
print(s.replace('adb','ABC',1))#替换,数字代表几个
print(s.upper())#变成大写
print(s.lower())#变成小写
print(s.capitalize())#首字母大写
print(s.startswith('p'))#判断是不是以p开头的
print(s.endswith('p'))#判断是不是以p结尾的
print(s.islower())#判断是否小写
print(s.isupper())#判断是否大写
print(s.istitle())#判断是不是标题(首字母是不是大写)
print(s.isdigit())#判断是不是整数
print(s.center(50,'*'))#放在50个字符中间,字符不够,用*来凑
s2='abc123'
print(s2.isalpha())#判断是不是全字母或汉字,不能有数字
print(s.isspace())#判断是否全部都是空格
print(s.isalnum())#没有特殊字符,返回True
print(s.isidentifier())#判断是不是一个合法变量名

#用.format来格式化字符串。用{}来占位,不用一一对应
#目标:输出字符串 insert into user VALUE (username,password,addr,email,phone)

 

#第一种格式化字符串
s='insert into user VALUE ({username},{password},' \
'{addr},{email},{phone}); '
new_s = s.format(addr='北京',phone=1223,email='niu@qq.com',username='niuhanyang',password='12345')
print(new_s)

#第二种格式化字符串
s='insert into user VALUE ({username},{password},' \
'{addr},{email},{phone}); '
d = {'addr': '北京', 'username': 'xiaohei', 'password': '12345', 'email': 12,
"phone": 'sdfs'}
s_map=s.format_map(d)
print(s_map)


l = [1,2,3,4,5,6,7,8,9,10]
for i in l:
res='0'+str(i)
print(res)

t='user1,user2,user3, user4,user5,user6,user7'
print('传分隔符',t.split(','))#按照某个字符来分割字符串儿
print('什么都不传',t.split())#什么都不传,按空格分开。没有空格就认为是一个元素

cars = ['ad','cd','ef']
print('、'.join(cars))#以某个字符把list中的元素连起来,变成一个字符串儿。跟split全反
print(str(cars))#看着没有区别,但已经变成了字符串

replace strip join split isdigit upper lower format startswith endswith count
这几个必须记住,很常用


posted @ 2018-11-22 23:44  南隅一树  阅读(2076)  评论(0编辑  收藏  举报