字符串、列表、元组、字典、集合-内置方法
一、字符串类型
1.定义
msg='hello' # msg=str('msg'),此时为字符串类型
2.类型转换
str可以把任意其他类型都转成字符串
# res=str({'a':1}) 此时就把字典转为字符串了
3.内置方法一
3.1 按索引取值(正向取+反向取)
msg = 'hello world' #正向取 print(msg[0]) print(msg[5]) #反向取 print(msg[-1]) #此时结果为:h 空 d ,一个字母占一个索引位置,空格也是
3.2 切片:切片:索引的拓展应用,从一个大字符串中拷贝出一个子字符串
msg = 'hello world' # 顾头不顾尾 res=msg[0:5] #x print(res) print(msg) # 步长 res=msg[0:5:2] # 0 2 4 print(res) # hlo # 反向步长 res=msg[5:0:-1] print(res) #" olle" msg = 'hello world' res=msg[:] # res=msg[0:11] print(res) res=msg[::-1] # 把字符串倒过来 print(res)
3.3 长度:len()
msg='hello world' print(len(msg))
3.4 成员运算in和not in
# 判断一个子字符串是否存在于一个大字符串中
print("alex" in "alex is sb") print("alex" not in "alex is sb")
3.5 移除字符串左右两侧的符号strip,默认去掉的空格
msg=' aaa ' res=msg.strip() print(msg) # 不会改变原值 print(res) # 是产生了新值
# 默认去掉的空格
msg='****aaa****'
print(msg.strip('*')) #aaa
# 了解:strip只取两边,不去中间
msg='****e*****gon****'
print(msg.strip('*')) # e*****gon
msg='**/*=-**aaa**-=()**'
print(msg.strip('*/-=()')) #aaa
3.5.1 实际应用
#应用:防止用户输入不规范 inp_user=input('your name>>: ').strip() # inp_user=" egon" inp_pwd=input('your password>>: ').strip() if inp_user == 'egon' and inp_pwd == '123': print('登录成功') else: print('账号密码错误')
3.6:切分split:把一个字符串按照某种分隔符进行切分,得到一个列表
# # 默认分隔符是空格 info='aaa 18 male' res=info.split() print(res) #['aaa', '18', 'male'] # # 指定分隔符 info='aaa:18:male' res=info.split(':') print(res) #['aaa', '18', 'male'] # 指定分隔次数 info='aaa:18:male' res=info.split(':',1) print(res) #['aaa', '18:male']
3.7 循环
info='egon:18:male' for x in info: print(x) #每个字母包括符号都打印
4.内置方法二
# strip,lstrip,rstrip msg='***egon****' print(msg.strip('*')) #egon print(msg.lstrip('*')) #egon**** 去除左边的 print(msg.rstrip('*')) #***egon 去除右边的 # lower,upper #转为大小写 msg='AbbbCCCC' print(msg.lower()) print(msg.upper()) # startswith,endswith print("alex is sb".startswith("alex")) print("alex is sb".endswith('sb')) # format格式化 #split,rsplit:将字符串切成列表 info="egon:18:male" print(info.split(':',1)) # ["egon","18:male"] print(info.rsplit(':',1)) # ["egon:18","male"] #join: 把列表拼接成字符串 l=['egon', '18', 'male'] res=l[0]+":"+l[1]+":"+l[2] #res=":".join(l) # 按照某个分隔符号,把元素全为字符串的列表拼接成一个大字符串 print(res) # replace 替换 msg="you can you up no can no bb" print(msg.replace("you","YOU",)) print(msg.replace("you","YOU",1)) #只替换第一个 #isdigit # 判断字符串是否由纯数字组成,num1
=
b
'4'
#bytes
num2
=
u
'4'
#unicode,python3中无需加u就是unicode
num3
=
'四'
#中文数字
num4
=
'Ⅳ'
#罗马数字,此时只能识别num1,num2
print('123'.isdigit()) #True
#isnumberic 可以识别num2,num3,num4
#isdecimal只能识别:num2
print('12.3'.isdigit()) #False #综合应用 age=input('请输入你的年龄:').strip() if age.isdigit(): age=int(age) # int("abbab") if age > 18: print('大了') elif age < 18: print('小了') else: print('对了') else: print('必须输入数字')
5.内置方法其他
# find,rfind,index,rindex,count msg = 'hello egon hahaha' # 找到返回起始索引 # print(msg.find('e')) # 返回要查找的字符串在大字符串中的起始索引 # print(msg.find('egon')) # print(msg.index('e')) # print(msg.index('egon')) # 找不到 # print(msg.find('xxx')) # 返回-1,代表找不到 # print(msg.index('xxx')) # 抛出异常 # msg='hello egon hahaha egon、 egon' # print(msg.count('egon')) #计数 # center,ljust,rjust,zfill print('egon'.center(50,'*')) #居中***********************egon*********************** print('egon'.ljust(50,'*')) # egon********************************************** print('egon'.rjust(50,'*')) # **********************************************egon print('egon'.zfill(10)) # 000000egon #expandtabs msg='hello\tworld' print(msg.expandtabs(2)) # 设置制表符代表的空格数为2 hello world # captalize,swapcase,title print("hello world egon".capitalize()) #Hello world egon 第一个首字母大写 print("Hello WorLd EGon".swapcase()) #hELLO wORlD egON 大小写互换 print("hello world egon".title()) #Hello World Egon 全部首字母大写 # is数字系列 # is其他 # print('abc'.islower()) # print('ABC'.isupper()) # print('Hello World'.istitle()) # print('123123aadsf'.isalnum()) # 字符串由字母或数字组成结果为True # print('ad'.isalpha()) # 字符串由由字母组成结果为True # print(' '.isspace()) # 字符串由空格组成结果为True # print('print'.isidentifier()) # print('age_of_egon'.isidentifier()) # print('1age_of_egon'.isidentifier())
二、列表类型
1.定义
l=[1,1.2,'a'] # l=list([1,1.2,'a'])
2.类型转换
但凡能够被for循环遍历的类型都可以当做参数传给list()转成列表
3.内置方法:索引、切片、长度、成员运算等与字符串一样
3.1 向列表中添加值
# 追加 l=[111,'egon','hello'] l.append(3333) l.append(4444) print(l) #[111, 'egon', 'hello', 3333, 4444]依次添加在后面 # 插入值 l=[111,'egon','hello'] l.insert(0,'alex') print(l) #根据索引插入 #添加列表 #new_l=[1,2,3] # l=[111,'egon','hello'] # l.append(new_l) # print(l) # 代码实现 # new_l=[1,2,3] # for item in new_l: # l.append(item) # print(l) #['alex', 111, 'egon', 'hello', 1, 2, 3] # extend实现了上述代码 new_l=[1,2,3] l.extend(new_l) l.extend('abc') print(l) #['alex', 111, 'egon', 'hello', 1, 2, 3, 'a', 'b', 'c'],extend拆开一个一个加进去
3.2删除
# 方式一:通用的删除方法,只是单纯的删除、没有返回值 # l = [111, 'egon', 'hello'] # del l[1] # x =del l[1] # 抛出异常,不支持赋值语法 # print(l) # 方式二:l.pop()根据索引删除,会返回删除的值 # l = [111, 'egon', 'hello'] # l.pop() # 不指定索引默认删除最后一个 # l.pop() # print(l) # res=l.pop(1) # print(l) # print(res) # 方式三:l.remove()根据元素删除,返回None # l = [111, 'egon', [1,2,3],'hello'] # l.remove([1,2,3]) # print(l) # res=l.remove('egon') # print(res) # None
3.3其他
l = [1, 'aaa', 'bbb','aaa','aaa'] #l.count() # print(l.count('aaa')) #统计个数 #l.index() # print(l.index('aaa')) #找索引 # print(l.index('aaaaaaaaa')) # 找不到报错 #l.clear() # l.clear() #删除 # print(l) #l.reverse() #不是排序,就是将列表倒过来 # l = [1, 'egon','alex','lxx'] # l.reverse() # print(l) # 5、l.sort() #列表内元素必须是同种类型才可以排序 # l=[11,-3,9,2,3.1] # l.sort() # 默认从小到大排,称之为升序 # l.sort(reverse=True) # 从大到小排,设置为降序 # print(l) # l=[11,'a',12] # l.sort() # l=['c','e','a'] # l.sort() # print(l)
3.4补充
#队列:FIFO,先进先出 l=[] # 入队操作 l.append('first') l.append('second') l.append('third') print(l) # # 出队操作 print(l.pop(0)) #first print(l.pop(0)) #second print(l.pop(0)) #third #堆栈:LIFO,后进先出 l=[] # 入栈操作 l.append('first') l.append('second') l.append('third') print(l) # 出队操作 print(l.pop()) #third print(l.pop()) #second print(l.pop()) #first
三、元组类型
1.定义
()内用逗号分隔开多个任意类型的元素,t=(1,1.3,'aa') # t=tuple((1,1.3,'aa')) ####### t=(10,) # 如果元组中只有一个元素,必须加逗号
2.作用
元组就是"一个不可变的列表"。
作用:按照索引/位置存放多个值,只用于读不用于改
3.类型转换
# print(tuple('hello')) # print(tuple([1,2,3])) # print(tuple({'a1':111,'a2':333}))
4.内置方法:索引、切片、长度、成员运算符、循环等于上面字符串一样
四、字典类型
1.定义
{}内用逗号分隔开多个key:value,其中value可以使任意类型,但是
key必须是不可变类型,且不能重复
2.造字典的方式
#方式一
# f={} # 默认定义出来的是空字典
# d={'k1':111,(1,2,3):222} # d=dict(...) # print(d['k1']) # print(d[(1,2,3)]) # print(type(d))
#方式二
# d=dict(x=1,y=2,z=3)
# print(d,type(d))
info=[
['name','egon'],
('age',18),
['gender','male']
]
d={}
for k,v in info: # k,v=['name','egon'],
d[k]=v
print(d)
res=dict(info) # 一行代码搞定上述for循环的工作
print(res)
keys=['name','age','gender']
d={}
for k in keys:
d[k]=None
print(d)
#d={}.fromkeys(keys,None) # 一行代码搞定上述for循环的工作
print(d)
3.内置方法一:长度、成员运算符与上面一样
按key存取
按key存取值:可存可取 # d={'k1':111} # 针对赋值操作:key存在,则修改 # d['k1']=222 # 针对赋值操作:key不存在,则创建新值 # d['k2']=3333 # print(d) d={'k1':111,'k2':2222} #d.keys() ['k2', 'k1'] #d.values() [2222, 111] #d.items() [('k2', 2222), ('k1', 111)] #dict(d.items()) {'k2': 2222, 'k1': 111}
删除
d={'k1':111,'k2':2222} #通用删除 # del d['k1'] # print(d) #pop删除:根据key删除元素,返回删除key对应的那个value值 # res=d.pop('k2') # print(d) # print(res) # popitem删除:随机删除,返回元组(删除的key,删除的value) # res=d.popitem() # print(d) # print(res)
for循环
d={'k1':111,'k2':2222} for k in d.keys(): print(k) for k in d: #和d.keys()一样 print(k) for v in d.values(): print(v) for k,v in d.items(): print(k,v) print(list(d.keys())) print(list(d.values())) print(list(d.items()))
4.内置方法二
d = {'k1': 111} # 1、d.clear() # 2、d.update() # d.update({'k2':222,'k3':333,'k1':111111111111111}) # print(d) # 3、d.get() :根据key取值,容错性好 # print(d['k2']) # key不存在则报错 # print(d.get('k1')) # 111 # print(d.get('k2')) # key不存在不报错,返回None # 4、d.setdefault() # info={} # if 'name' in info: # ... # 等同于pass # else: # info['name']='egon' # print(info) # 4.1 如果key有则不添加,返回字典中key对应的值 info = {'name': 'egon'} res = info.setdefault('name', 'egon') print(info) print(res) # 4.2 如果key没有则添加,返回字典中key对应的值 info = {} res = info.setdefault('name', 'egon') # print(info) print(res)
五、集合(set)
1.关系运算,去重,集合里面的元素不能重复
# friends1 = ["zero","kevin","jason","egon"] # friends2 = ["Jy","ricky","jason","egon"] # # l=[] # for x in friends1: # if x in friends2: # l.append(x) # print(l)
2.定义
在{}内用逗号分隔开多个元素,多个元素满足以下三个条件
1. 集合内元素必须为不可变类型
2. 集合内元素无序
3. 集合内元素没有重复
3.关系运算
friends1 = {"zero","kevin","jason","egon"} friends2 = {"Jy","ricky","jason","egon"} #取交集:两者共同的好友 # res=friends1 & friends2 # print(res) # print(friends1.intersection(friends2)) # 取并集/合集:两者所有的好友 # print(friends1 | friends2) # print(friends1.union(friends2)) # 取差集:取friends1独有的好友 # print(friends1 - friends2) # print(friends1.difference(friends2)) # 取friends2独有的好友 # print(friends2 - friends1) # print(friends2.difference(friends1)) # 对称差集: 求两个用户独有的好友们(即去掉共有的好友) # print(friends1 ^ friends2) # print(friends1.symmetric_difference(friends2)) # 父子集:包含的关系 # s1={1,2,3} # s2={1,2,4} # 不存在包含关系,下面比较均为False # print(s1 > s2) # print(s1 < s2) # s1={1,2,3} # s2={1,2} # print(s1 > s2) # 当s1大于或等于s2时,才能说是s1是s2父级 # print(s1.issuperset(s2)) # print(s2.issubset(s1)) # s2 < s2 =>True # s1={1,2,3} # s2={1,2,3} # print(s1 == s2) # s1与s2互为父子 # print(s1.issuperset(s2)) # print(s2.issuperset(s1))
4.去重
1、只能针对不可变类型去重 # print(set([1,1,1,1,2])) # 2、无法保证原来的顺序 # l=[1,'a','b','z',1,1,1,2] # l=list(set(l)) # print(l) l=[ {'name':'lili','age':18,'sex':'male'}, {'name':'jack','age':73,'sex':'male'}, {'name':'tom','age':20,'sex':'female'}, {'name':'lili','age':18,'sex':'male'}, {'name':'lili','age':18,'sex':'male'}, ] new_l=[] for dic in l: if dic not in new_l: new_l.append(dic) # print(new_l)
5.其他
s={1,2,3} # 需要掌握的内置方法1:discard # s.discard(4) # 删除元素不存在do nothing # print(s) # s.remove(4) # 删除元素不存在则报错 # 需要掌握的内置方法2:update # s.update({1,3,5}) # print(s) # 需要掌握的内置方法3:pop # res=s.pop() # print(res) # 需要掌握的内置方法4:add # s.add(4) # print(s) res=s.isdisjoint({3,4,5,6}) # 两个集合完全独立、没有共同部分,返回True print(res) # s.difference_update({3,4,5}) # s=s.difference({3,4,5}) # print(s) #{1, 2}取s里面与{3,4,5}不一样的元素