6、基本数据类型的内置方法
字符串相关
str()函数会把内容转换成字符串
l1 = [1, 2, 3] print(str(l1), type(str(l1))) # [1, 2, 3] <class 'str'> print(str({"name": "jason", "age": 18}), type(str({"name": "jason", "age": 18}))) # {'name': 'jason', 'age': 18} <class 'str'> print(str((1, 2, 3)), type(str((1, 2, 3)))) # (1, 2, 3) <class 'str'> print(str({1, 2, 3, 4}), type(str({1, 2, 3, 4}))) # {1, 2, 3, 4} <class 'str'>
字符串切片操作
str1 = "hello world" print(str1[0:9]) # hello wor 索引从0到8 相当于[0, 8) print(str1[0:9:2]) # hlowr 步长 = 2 print(str1[::-1]) # dlrow olleh 反向切片,-1表示从右向左取值
获取字符串长度
str1 = "hello world" print(len(str1)) # 11
成员运算
str1 = "hello world" print("hello" in str1) # True
去除首尾空格和换行
str1 = " life is short " print(str1.strip()) # life is short
去除首尾指定字符
str2 = "********life is short*********" print(str2.strip("*")) # life is short
拆分字符串
str1 = 'hello world' print(str1.split()) # ['hello', 'world'] split中不指定符号,默认是空格 str2 = '127.0.0.1' print(str2.split('.')) # ['127', '0', '0', '1']
取出字符串中的每个字符
str1 = 'hello world' for c in str1: print(c) # h # e # l # l # o # # w # o # r # l # d
需要掌握的操作
strip, lstrip, rstrip:strip之前说过了,l和r指的是只会去除哪一边的符号
lower, upper:全部小写和全部大写
startwith和endwith:见名知意,以什么开头和以什么结尾
split和rsplit: rsplit从右到左切割字符串,可以指定切割次数,而split从左到右切割,可以指定次数
str1 = 'C:/a/b/c/d.txt' # split会按照从左到右的顺序对字符串进行切割,可以指定切割次数 print(str1.split('/', 1)) # ['C:', 'a/b/c/d.txt']
join:从可迭代对象中取出多个字符串,然后按照指定的分隔进行拼接,拼接的结果为字符串
print(" ".join("hello")) # h e l l o print("%".join("1234")) # 1%2%3%4
replace:替换子字符串
str1 = "my name is llll" print(str1.replace('llll', 'zh')) # my name is zh
isdigit:判断字符串是否由纯数字组成
str1 = '12345' print(str1.isdigit()) # True str2 = '123g231' print(str2.isdigit()) # False
需要了解的操作
find:从指定范围内查找子字符串和起始索引,找得到返回数字1,找不到返回-1
msg = 'tony say hello' print(msg.find('o')) print(msg.find('o', 1, 3)) # 在索引为1和2(顾头不顾尾)的字符中查找字符o的索引
index:同find,但在找不到时会报错
count:用法同find,统计子串或者字符出现的次数
center,ljust,rjust,zfill:控制对齐和填充方式
name = 'tony' print(name.center(30, '-')) # -------------tony------------- print(name.ljust(30, '*')) # tony************************** print(name.rjust(30, '*')) # **************************tony print(name.zfill(50)) # 0000000000000000000000000000000000000000000000tony
captalize:首字母大写
swapcase:大小写反转
title:每个单词的首字母大写
对数字的判断
#在python3中 num1 = b'4' #bytes num2 = u'4' #unicode,python3中无需加u就是unicode num3 = '四' #中文数字 num4 = 'Ⅳ' #罗马数字 #isdigt:bytes,unicode >>> num1.isdigit() True >>> num2.isdigit() True >>> num3.isdigit() False >>> num4.isdigit() False #isdecimal:uncicode(bytes类型无isdecimal方法) >>> num2.isdecimal() True >>> num3.isdecimal() False >>> num4.isdecimal() False #isnumberic:unicode,中文数字,罗马数字(bytes类型无isnumberic方法) >>> num2.isnumeric() True >>> num3.isnumeric() True >>> num4.isnumeric() True # 三者不能判断浮点数 >>> num5 = '4.3' >>> num5.isdigit() False >>> num5.isdecimal() False >>> num5.isnumeric() False
最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景,如果要判断中文数字或者罗马数字,则需要用到isnumeric
列表相关
列表的定义
l1 = [1, 2, [1, 2]]
类型转换
print(list('abcdefg')) # ['a', 'b', 'c', 'd', 'e', 'f', 'g'] print(list({'name': 'li', 'age': 18, 'gender': None})) # ['name', 'age', 'gender'] print(list((1, 2, 3, 4))) # [1, 2, 3, 4] print(list({1, 2, 3, 4})) # [1, 2, 3, 4]
需要掌握的操作
通过索引取值
l1 = [1, 2, 4, 5] print(l1[2]) # 4
切片操作
l1 = [1, 2, 4, 5] print(l1[0:3]) # [1, 2, 4]
计算长度
l1 = [1, 2, 4, 5] print(len(l1)) # 4
成员运算
l1 = [1, 2, 4, 5] print(1 in l1) # True
尾部追加元素
l1 = [1, 2, 4, 5] l1.append(3) print(l1) # [1, 2, 4, 5, 3]
一次性在尾部添加多个值
l1 = [1, 2, 4, 5] l1.extend([88, 99, 100]) print(l1) # [1, 2, 4, 5, 88, 99, 100]
在指定位置插入元素
l1 = [1, 2, 4, 5] l1.insert(0, 55) print(l1) # [55, 1, 2, 4, 5]
根据索引删除元素
l1 = [1, 2, 4, 5] del l1[2] print(l1) # [1, 2, 5]
默认从列表中删除最后一个元素,可以加上索引,在指定位置删除
l1 = [1, 2, 4, 5] l1.pop() print(l1) # [1, 2, 4] l1.pop(1) print(l1) # [1, 4]
根据元素值删除元素
l1 = [1, 2, 4, 5] l1.remove(4) print(l1) # [1, 2, 5]
颠倒列表中的元素
l1 = [1, 2, 4, 5] l1.reverse() print(l1) # [5, 4, 2, 1]
给所有元素排序
l1 = [1, 2, 4, 3, 5] l1.sort() print(l1) # [1, 2, 3, 4, 5] l1.sort(reverse=True) print(l1) # [5, 4, 3, 2, 1]
我们常用数字类型比较大小,但是其实字符串、列表等都可以比较大小,比较的规则是:依次比较相同位置的元素大小,如果相同,则比较下一个位置,字符之间的大小取决于ASCII码
循环遍历列表中的元素
l1 = [1, 2, 4, 3, 5] for item in l1: print(item) # 1 # 2 # 4 # 3 # 5
需要了解的知识
列表翻转
l1 = [1, 2, 4, 3, 5] print(l1[::-1]) # [5, 3, 4, 2, 1]
反向步长
l1 = [1, 2, 4, 3, 5] print(l1[2::-1]) # [4, 2, 1]
元组相关
元组和列表类似,只不过元组是不可变对象而已
字典相关
字典的类型转换
info = dict([['name', 'tony'], ('age', 18)]) print(info) # {'name': 'tony', 'age': 18} # fromkeys会从元组中取出每个值当做key,然后与None组成key:value放到字典中 print({}.fromkeys(('name', 'age', 'sex'), None)) # {'name': None, 'age': None, 'sex': None}
需要掌握的操作
字典的取值
dic = {'name': 'xxx', 'age': 18, 'hobbies': ['play game', 'basketball']}
print(dic['name']) # xxx
长度len()
pop删除,通过指定key
成员运算,判断的是某个值是不是字典的key
获取所有的键和值
dic = {'name': 'xxx', 'age': 18, 'hobbies': ['play game', 'basketball']}
print(dic.keys()) # dict_keys(['name', 'age', 'hobbies'])
print(dic.values()) # dict_values(['xxx', 18, ['play game', 'basketball']])
print(dic.items()) # dict_items([('name', 'xxx'), ('age', 18), ('hobbies', ['play game', 'basketball'])])
for循环默认只会遍历字典的key
字典取值推荐使用的方法:get
dic = {'name': 'xxx', 'age': 18, 'hobbies': ['play game', 'basketball']}
res = dic.get('xxx', 666) # key不存在时,可以设置默认返回的值,不设置默认是None
print(res) # 666
随机删除一组值
dic = {'name': 'xxx', 'age': 18, 'hobbies': ['play game', 'basketball']}
item = dic.popitem() # 随机删除一组值,并且把结果返回
print(item) # ('hobbies', ['play game', 'basketball'])
更新
dic = {'name': 'xxx', 'age': 18, 'hobbies': ['play game', 'basketball']}
dic.update({'name': 'long', 'age': 3})
print(dic) # {'name': 'long', 'age': 3, 'hobbies': ['play game', 'basketball']}
key存在则不做任何修改,并且把这个key对应的value返回。key不存在则新增一组键值对
dic = {'k1': 111, 'k2': 222}
res = dic.setdefault('k3', 333)
print(res) # 333
print(dic) # {'k1': 111, 'k2': 222, 'k3': 333}
dic = {'k1': 111, 'k2': 222}
res = dic.setdefault('k1', 666)
print(res) # 111
print(dic) # {'k1': 111, 'k2': 222}
集合相关
s = set([1, 2, 3, 4, 5, 5]) print(s) # {1, 2, 3, 4, 5} s = {'name': 'jason'} print(s) # {'name'} s = set('hello') print(s) # {'e', 'l', 'h', 'o'}
集合可以去重,但是会打乱顺序
集合有关系运算
s1 = {1, 2, 3, 4}
s2 = {2, 4, 6, 8}
print(s1 | s2) # {1, 2, 3, 4, 6, 8}
print(s1 & s2) # {2, 4}
print(s1 - s2) # {1, 3}
print(s1 ^ s2) # {1, 3, 6, 8}
s3 = {1, 2, 4}
s4 = {2, 4}
print(s3 > s4) # True
print(s3 >= s4) # True
print(s4 < s3) # True
print(s4 <= s3) # True
可变类型与不可变类型
可变类型:值发生改变时,内存地址不变
不可变类型:值发生改变时,内存地址也发生改变
可变类型:列表,字典(value可以改变,但是key必须是不可变类型)
不可变类型:数字,字符串,元组
浙公网安备 33010602011771号