字符串,列表,元祖,字典,集合的内置方法

Posted 596014054-yangdongsheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串,列表,元祖,字典,集合的内置方法相关的知识,希望对你有一定的参考价值。

一、 数字类型

1.1 整型int
   1、用途: 记录年龄等级各种号码

   2、定义方式:    

技术分享图片
age=18  
age=int(18)

x=int(123)      #只能将纯数字的字符串转换成整型
print(type(x))
print(int(3.7))  #这个小数部分没有了
View Code

  3、常用操作+内置的方法           ( 赋值比较算术)

该类型总结:   存一个值  ;  不可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

判断是否哈希           

print(hash(10))
print(hash([1,2,3]))

1.2 浮点型float
   1、用途: 记录身高体重薪资

   2、定义方式

salary=1.3 
#salary=float(1.3)

x=float(3.1)
print(x,type(x))

1.3、常用操作+内置的方法
  赋值比较算术

该类型总结:   存一个值   ; 不可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

x=3.1
print(id(x))
x=3.2
print(id(x))

了解:
 

技术分享图片
#复数
x=1-2j
print(x,type(x))
print(x.real)
print(x.imag)

#长整型
#不常见,知道有这个东西就行,至于到哪一位属于长整形,没必要了解

其他进制=>十进制
十进制: 0-9
11 = 1*10^1 + 1*10^0

二进制: 0 1
11 = 1*2^1 + 1*2^0

八进制: 0-7
11 = 1*8^1+1*8^0

十六进制:0-9 A-F
11 = 1*16^1+1*16^0

十进制=>其他进制
print(bin(13)) # 十进制=>二进制
print(oct(13)) # 十进制=>八进制
print(hex(13)) # 十进制=>十六进制
View Code

 

二 、字符串类型

2.1、基本使用
   1、用途:记录描述性质的特征,比如名字地址性别

   2、定义方式:在单引号双引号三引号内包含的一串字符

msg=aaa"bbb" 
#msg=str(...)

可以将任意类型转换成字符串

技术分享图片
str(1)
str(1.3)
x=str([1,2,3])
print(x,type(x))
View Code

 

 3、常用操作+内置的方法

技术分享图片
#strip 方法用于移除字符串头尾指定的字符(默认为空格)。
#str.strip([chars]);
# chars移除字符串头尾指定的字符。 这是一个包含的关系
name = "*joker**"
print(name.strip("*"))
print(name.lstrip("*")) #去除左边
print(name.rstrip("*")) #去除右边

#长度len
msg=你好啊a
print(len(msg))

#成员运算in和not in
msg=yangyuanhu 老师是一个非常虎的老师
print(yangyuanhu in msg)
print( not in msg)
print(not  in msg)

#format的三种玩法
print(my name is %s my age is %s %(egon,18))
print(my name is %s my age is %s %(18,egon))
print(my name is {name} my age is {age} .format(age=18,name=egon))
了解
 print(my name is {} my age is {} .format(18,egon))
 print(my name is {0} my age is {1} .format(18,egon))
 print(my name is {1} my age is {0} .format(18,egon))

#startswith,endswith
name = "joker_li"
print(name.endswith("li")) #是否以什么结尾
print(name.startswith("joker")) #是否以什么开头

#replace
name = "joker is good joker boy!"
print(name.replace(joker,li)) #所有joker替换li
print(name.replace(joker,li,1)) #从左到右替换1次

#find,rfind,index,rindex,count
name = jokerk say hi
print(name.find(s))   #字符串也是可以切片找不到则返回-1不会报错,找到了则显示索引
print(name.count(k))  #统计包含有多少个

#split
name = root:x:0:0::/root/:bin/bash
print(name.split(:)) #默认分隔符为空格
name = c:/a/b/c/d.txt #想拿到顶级目录
print(name.split(/,1)) #按多少次切片,从左边
name = a|b|c
print(name.rsplit(|,1)) #按多少次切片,从右边

#join
tag =  
print(tag.join([joker,li,good,boy])) #可迭代对象必须都是字符串
#也就是说这个方法是将列表转换为字符串,如果tag有变量的话,就会循环加

#center,ljust,rjust,zfill
name = joker
print(name.center(10,_)) #不够10个字符,用_补齐
print(name.ljust(10,*)) #左对齐
print(name.rjust(10,*)) #右对齐,注意这个引号内只能是一个字符
print(name.zfill(10)) #右对齐,用0补齐就是

#expandtabs
name = joker	hello
print(name)
print(name.expandtabs(4)) #expand扩张的意思,就是将tab建转为多少个空格

#lower,upper
name = joker
print(name.lower()) #大写变小写,如果本来就是小写,那就没变化
print(name.upper()) #小写变大写,如果本来就是大写,那就没变化

#capitalize,swapcase,title
name = joker li
print(name.capitalize()) #首字母大写
print(name.swapcase()) #大小写对调
print(name.title()) #每个单词的首字母大写

#is数字系列
num1 = b4 #bytes 类型
print(type(num1))
num2 = u4 #unicode类型,在3里默认就是这个类型
print(type(num2))
num3 =  #中文数字
num4 =  #罗马数字

#isdigt,bytes,unicode
print(num1.isdigit()) #是不是一个整数数字,如果是浮点数就会False
print(num2.isdigit())
print(num3.isdigit()) #False
print(num4.isdigit()) #罗马数字 False ,不是一个整数

#isdecimal,uncicode
#bytes类型无isdecimal方法
print(num2.isdecimal()) #检查字符串是否只包含十进制字符。这种方法只存在于unicode对象
#注意:定义一个十进制字符串,只需要在字符串前添加 ‘u‘ 前缀即可
print(num3.isdecimal())
print(num4.isdecimal())

#isnumberic:unicode,中文数字,罗马数字
#bytes类型无isnumberic方法
print(num2.isnumeric()) #判断是不是数字,包括中文大写数字,罗马数字等
print(num3.isnumeric())
print(num4.isnumeric())

#三者不能判断浮点数
num5=4.3 #全是false
print(num5.isdigit())
print(num5.isdecimal())
print(num5.isnumeric())
# 最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
# 如果要判断中文数字或罗马数字,则需要用到isnumeric

了解的操作
#find,rfind,index,rindex,count
msg=hello worldaa
print(msg.index(wo))
print(msg.index(wo,0,3))
print(msg.find(wo,0,3))
print(msg.find(xxxxxxx))
print(msg.index(xxxxxxx))
print(msg.count(l))

#center,ljust,rjust,zfill
name=input(>>: ).strip()
print(egon.center(50,=))
print((%s %name).center(50,-))

print(egon.ljust(50,=))
print(egon.rjust(50,=))
print(egon.zfill(50))

#expandtabs
print(hello	world.expandtabs(5))

#captalize,swapcase,title
print(hello world.capitalize())
print(Hello world.swapcase())
print(Hello world.title())




#is
print(===>)
name=joker123
print(name.isalnum()) #字符串由字母和数字组成
print(name.isalpha()) #字符串只由字母组成

print(name.isidentifier()) #判断是不是一个合法的表示符
print(name.islower()) #判断是不是小写
print(name.isupper()) #是不是大写
print(name.isspace()) #判断是不是空格
print(name.istitle()) #每个单词字母首字母大小
View Code

该类型总结:存一个值 ;有序 ; 不可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

 

三、列表类型

3.1、基本使用

 1、用途:记录多个值,比如人的多个爱好

 2、定义方式: 在[]内用逗号分隔开多个任意类型的值

li=[1,2,3] # li=list([1,2,3])

x=list(hello)
x=list({a:1,b:2,c:3})
print(x)

 

3.2、常用操作+内置的方法

1、按索引存取值(正向存取+反向存取):即可存也可以取

技术分享图片
li=[a,b,c,d]
print(li[-1])
li[-1]=D
print(li)

li[4]=e
del li[0]
print(li)
View Code

2、切片(顾头不顾尾,步长)

li=[a,b,c,d]
print(li[0:3])

3、长度

print(len(li))

4、成员运算 in 和 not in

技术分享图片
users=[egon,lxx,yxx,cxxx,[1,2,3]]
print(lxx in users)
print([1,2,3] in users)
print(1 in users)
View Code

5、追加

技术分享图片
li=[a,b,c,d]
print(id(li))
li.append(e)
li.append([1,2,3])
print(li,id(li))
View Code

6、删除

技术分享图片
li=[a,b,c,d]
#按照元素值去单纯地删除某个元素
del li[1]
res=li.remove(c)
print(li)
print(res)
#按照元素的索引去删除某个元素并且拿到该元素作为返回值
res=li.pop(1)
print(li)
print(res)
View Code

7、循环

li=[a,b,c,d]
for item in li:
print(item)

该类型总结:存多个值 ;有序 ; 可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

print(hash([1,2,3]))

列表常用方法:

技术分享图片
li=[a,b,c,d,c,e]
print(li.count(c))       #计算li中字符c的个数
li.extend([1,2,3])       #把括号里列表里的元素添加到li
li.append([1,2,3])      #把括号里的列表增加到列表末尾
print(li)

print(li.index(z))      #打印出z的索引值
print(li.index(b))
print(li.index(d,0,3))

li.insert(1,egon)     #在索引值1处插入字符串egon
print(li)

li=[3,1,9,11]
li.reverse()         #翻转列表的顺序
print(li)

li.sort(reverse=True)    #按照数字或字母顺序排序
print(li)
View Code

练习,模拟堆栈和队列

技术分享图片
队列: 先进先出
q=[]    
入队
q.append(first)
q.append(second)
q.append(third)
print(q)   
出队
print(q.pop(0))
print(q.pop(0))
print(q.pop(0))

堆栈: 先进后出
q=[] 
入栈
q.append(first)
q.append(second)
q.append(third)
出栈
print(q.pop(-1))
print(q.pop(-1))
print(q.pop(-1))
View Code

四  元组类型

元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表,用于存放多个值,当存放的多个值只有读的需求没有改的需求时用元组最合适

定义方式 : 在()内用逗号分隔开多个任意类型的值

技术分享图片
t=(1,3.1,aaa,(1,2,3),[a,b])    # t=tuple(...)
print(type(t))

res=tuple(hello)
res=tuple({x:1,y:2})
print(res)
View Code

 

4.1、常用操作+内置的方法
优先掌握的操作:
 1、按索引取值(正向取+反向取):只能取

 t=(a,b,1)
 t[0]=111

 

 2、切片(顾头不顾尾,步长)

技术分享图片
 t=(h,e,l,l,o)
 res=t[1:3]
 print(res)
 print(t)
View Code

 3、长度

t=(h,e,l,l,o)
print(len(t))

 4、成员运算in和not in

t=(h,e,l,l,o)
print(h in t)

 5、循环

t=(h,e,l,l,o)
for item in t:
print(item)

 

该类型总结  :存多个值,有序,不可变(1、可变:值变,id不变。可变==不可hash 2、不可变:值变,id就变。不可变==可hash)

技术分享图片
t=(1,a,[x,y,z])
# print(id(t[2]))

# print(id(t))
t[2][0]=X
print(t)
print(id(t))

print(id(t[2]))

list1=[a,b,c]
print(id(list1[0]))
print(id(list1[1]))
print(id(list1[2]))

print(=*50)
list1[1]=B
print(id(list1[0]))
print(id(list1[1]))
print(id(list1[2]))


t=(a,b,a)
print(t.index(a))
t.index(xxx)
View Code

 

4.2 、可变类型与不可变类型图解分析

 技术分享图片

 

五、字典类型

字典的特性:

  • dict 是无序的
  • key 必须是唯一的,不能重复

增加

技术分享图片技术分享图片
>>> info["stu1104"] = "苍井空"
>>> info
{‘stu1102‘: ‘LongZe Luola‘, ‘stu1104‘: ‘苍井空‘, ‘stu1103‘: ‘XiaoZe Maliya‘, ‘stu1101‘: ‘TengLan Wu‘}
View Code

修改

技术分享图片技术分享图片
>>> info[‘stu1101‘] = "武藤兰"
>>> info
{‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘, ‘stu1101‘: ‘武藤兰‘}
View Code

删除

技术分享图片技术分享图片
>>> info
{‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘, ‘stu1101‘: ‘武藤兰‘}
>>> info.pop("stu1101") #标准删除姿势
‘武藤兰‘
>>> info
{‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘}
>>> del info[‘stu1103‘] #换个姿势删除
>>> info
{‘stu1102‘: ‘LongZe Luola‘}
>>> 
>>> 
>>> 
>>> info = {‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘}
>>> info
{‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘} #随机删除
>>> info.popitem()
(‘stu1102‘, ‘LongZe Luola‘)
>>> info
{‘stu1103‘: ‘XiaoZe Maliya‘}
View Code

查找

技术分享图片技术分享图片
>>> info = {‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘}
>>> 
>>> "stu1102" in info #标准用法
True
>>> info.get("stu1102")  #获取
‘LongZe Luola‘
>>> info["stu1102"] #同上,但是看下面
‘LongZe Luola‘
>>> info["stu1105"]  #如果一个key不存在,就报错,get不会,不存在只返回None
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: ‘stu1105‘
View Code

多级字典嵌套及操作

技术分享图片技术分享图片
av_catalog = {
    "欧美":{
        "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
        "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
        "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
        "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
    },
    "日韩":{
        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
    },
    "大陆":{
        "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
    }
}

av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
print(av_catalog["大陆"]["1024"])
#ouput 
[‘全部免费,真好,好人一生平安‘, ‘服务器在国外,慢,可以用爬虫爬下来‘]
View Code

其他操作

技术分享图片技术分享图片
#values
>>> info.values()
dict_values([‘LongZe Luola‘, ‘XiaoZe Maliya‘])

#keys
>>> info.keys()
dict_keys([‘stu1102‘, ‘stu1103‘])


#setdefault
#setdefault:key不存在则设置默认值,并且将默认值添加到values中
#key存在则不设置默认,并且返回已经有的值
>>> info.setdefault("stu1106","Alex")
‘Alex‘
>>> info
{‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘, ‘stu1106‘: ‘Alex‘}
>>> info.setdefault("stu1102","龙泽萝拉")
‘LongZe Luola‘
>>> info
{‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘, ‘stu1106‘: ‘Alex‘}


#update 
>>> info
{‘stu1102‘: ‘LongZe Luola‘, ‘stu1103‘: ‘XiaoZe Maliya‘, ‘stu1106‘: ‘Alex‘}
>>> b = {1:2,3:4, "stu1102":"龙泽萝拉"}
>>> info.update(b)
>>> info
{‘stu1102‘: ‘龙泽萝拉‘, 1: 2, 3: 4, ‘stu1103‘: ‘XiaoZe Maliya‘, ‘stu1106‘: ‘Alex‘}

#items
info.items()
dict_items([(‘stu1102‘, ‘龙泽萝拉‘), (1, 2), (3, 4), (‘stu1103‘, ‘XiaoZe Maliya‘), (‘stu1106‘, ‘Alex‘)])


#通过一个列表生成默认dict,有个没办法解释的坑,少用吧这个
>>> dict.fromkeys([1,2,3],‘testd‘)
{1: ‘testd‘, 2: ‘testd‘, 3: ‘testd‘}
View Code

循环dict 

技术分享图片
#方法1
for key in info:
    print(key,info[key])

#方法2
for k,v in info.items(): #因为会先把dict转成list,速度慢,数据里大时莫用
    print(k,v)
View Code

 

六 、集合

技术分享图片
a = t | s          # t 和 s的并集  
b = t & s          # t 和 s的交集  
c = t – s          # 求差集(项在t中,但不在s中)  
d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  

# set 无序,不重复序列

# 创建
# se = {‘123‘,345}
# print(type(se))

# s = set() # 创建一个空集合

# # 对比,之前我们把元祖转换成列表的方法
# l = list((1,2,3))
# print(l)   # [1, 2, 3] 实际里面运行了for循环,也就是init方法
#
# s1 = set(l)
# print(s1)  # {1, 2, 3} 集合还有一个机制就是,如果有相同的就会去除

# 功能
# s = set()
# s.add(1)
# s.add(1)
# print(s)   # {1}
# s.clear()
# print(s)  # 清空


# 差集
s1 = {11,22,33}
s2 = {22,33,44}
# s3= s1.difference(s2)  # s1中存在,s2中不存在 {11}
# s1.difference_update(s2) 更新到s1里面,不需要创建新的集合
# print(s3)

# 对称差集
# s3 = s1.symmetric_difference(s2) # 对称差集 {11, 44}
# s1.symmetric_difference_update(s2)  更新到s1里面,不需要创建新的集合
# print(s3)

# 删除
# s1.discard(11)
# print(s1) # {33, 22} 移除指定元素,不存在不报错

# s1.remove(11)
# print(s1)   {33, 22} ,不存在报错

# ret = s1.pop()  随机的,有返回值
# print(ret)

# 交集
# ret = s1.intersection(s2)
# print(ret)   {33, 22}  
# s1.intersection_update(s2)

# ret = s1.isdisjoint(s2)
# print(ret)   # 没有交集返回true,有交集返回true

# s1.issubset() # 是否是子序列,包含的关系
# s1.issuperset() # 是否是父序列,被包含的关系

# 并集
# ret = s1.union(s2)
# print(ret) {33, 22, 11, 44} 并集

# li = [1,2,3]
# s1.update(li) # 接收一个可迭代的相比add,它可以添加个序列,并且循环执行add
#
# print(s1) # {33, 2, 3, 1, 11, 22}
View Code

6.1、什么是集合
             在{}内用逗号分隔开多个值,集合的特点:
  1. 每个值必须是不可变类型
  2. 集合无序
  3. 集合内元素不能重复

6.2、 为何要用集合
  1. 用于做关系运算
  2. 去重

 

集合的第一大用途: 关系运算

 

技术分享图片
pythons={egon,张铁蛋,李铜蛋,赵银弹,王金蛋,艾里克斯}
linuxs={欧德博爱,李铜蛋,艾里克斯,lsb,ysb,wsb}


求同时报名两门课程的学生姓名:交集
print(pythons & linuxs)
print(pythons.intersection(linuxs))

pythons=pythons & linuxs
print(pythons) #{‘李铜蛋‘, ‘艾里克斯‘}
pythons.intersection_update(linuxs) #pythons=pythons.intersection(linuxs)
print(pythons) #{‘艾里克斯‘, ‘李铜蛋‘}

求报名学校课程的所有学生姓名:并集
print(pythons | linuxs)
print(pythons.union(linuxs))

求只报名python课程的学生姓名: 差集
print(pythons - linuxs)
print(pythons.difference(linuxs))
print(linuxs - pythons) #求只报名linux课程的学生姓名
print(linuxs.difference(pythons))

求没有同时报名两门课程的学生姓名: 对称差集
print((pythons - linuxs) | (linuxs - pythons))
print(pythons ^ linuxs)
print(pythons.symmetric_difference(linuxs))
View Code

 

父子集:指的是一种包含与被包含的关系
技术分享图片
s1={1,2,3}
s2={1,2}
print(s1 >= s2)
print(s1.issuperset(s2))
print(s2.issubset(s1))


情况一:
print(s1 > s2) #>号代表s1是包含s2的,称之为s1为s2的父集
print(s2 < s1)

情况二:
s1={1,2,3}
s2={1,2,3}
print(s1 == s2) #s1如果等于s2,也可以称为s1是s2的父集合

综上:
s1 >= s2 就可以称为s1是s2的父集


s3={1,2,3}
s4={3,2,1}
print(s3 == s4)

s5={1,2,3}
s6={1,2,3}
print(s5 >= s6)
print(s6 >= s5)
View Code
集合的第二大用途:去重
集合去重的局限性:
1. 会打乱原值的顺序
2. 只能针对不可变的值去重
技术分享图片
stus=[egon,lxx,lxx,alex,alex,yxx]
new_l=list(set(stus))
print(new_l)

old_l=[1,[1,2],[1,2]]
set(old_l)

l = [
    {name: egon, age: 18, sex: male},
    {name: alex, age: 73, sex: male},
    {name: egon, age: 20, sex: female},
    {name: egon, age: 18, sex: male},
    {name: egon, age: 18, sex: male},
]
new_l=[]
for dic in l:
if dic not in new_l:
new_l.append(dic)
print(new_l)
View Code
需要掌握的操作:
技术分享图片
s1 = {1, 2, 3}
s1.update({3,4,5})
print(s1)
print(s1.pop())
print(s1)

s1.remove(2)
print(s1)

s1={1,2,3}
print(id(s1))
s1.add(4)
print(s1)
print(id(s1))

s1={1,2,3}
s1.discard(4)
s1.remove(4)
print(s1)

s1={1,2,3}
s2={4,5}
print(s1.isdisjoint(s2))
View Code

总结  : 存多个值   ; 无序  ;  set可变

 





















以上是关于字符串,列表,元祖,字典,集合的内置方法的主要内容,如果未能解决你的问题,请参考以下文章

06 列表字典集合元祖的内置方法

python数字字符串字典 列表 元祖集合的一些使用方法

元祖,字典,集合数据类型

关于Python元祖,列表,字典,集合的比较

字符串 数字 列表 元祖 字典 的不同分类and集合的概念

老齐python-基础4(元祖字典集合)