python 数字类型和字符串类型的方法大总结
数字
//int()函数,转换,将字符串转换为数字
a = "123"//仅仅是由数字组成的字符串才可以转换 如:"123a"就不可以 b = int(a)//b就变成数字了,也就是整形 123 当然,也可以加参数,如: a = "0011" b = int(a,base = 2)//输出应该是3,所谓的base=2是指这个由数字组成的字符串是2进制的,而int(a,base = 2),是将这个2进制数转换成10进制,其实无论你base是多少也就是说无论你这个字符串本身是多少进制的数,最后通过int()函数都是转换成10进制的数,base默认等于10 a = "12a" b = int(a, base=16)//结果是298
//bit_length()方法,求一个数字的二进制有多少位
a = 10
b = a.bit_length()//输出4,10的二进制是1010,所以是4
字符串
先说明,字符串有好鸡巴多方法,大概只有6个是常用的,其余的先在这里写下,需要用时再来查
字符串是不可以修改,一旦创建就无法修改,所以在使用方法时都需要一个新的变量来接收这个新的字符串,原字符串不会改变因为字符串无法修改,要修改就只能创建一个新的
//capitalize()方法,无参,首字母大写
a = "djh" b = a.capitalize() print(b) 结果 Djh
//casefold()方法,无参,变小写,但不仅仅只是对于英文的小写可以,对于一切有对应关系的字符都可以,比如法国的字符,可能也有大小写但是我们不知道怎么给对应而已,如果用casefold()的话就可以搞出来,当然,一般情况下用的比较少
a = "DJh" b = a.casefold() print(b) 结果 djh
//lower()方法,无参,也是变小写,但是这个是只针对英文字母的,其他字符不行
a = "DJh" b = a.lower() print(b) 结果 djh
//islower()方法,判断字符串里是否含有字母且字母全是小写!是则真,不是则假
a = "5啊as\'d" b = a.islower() print(b) 结果 True a = "A5啊as\'d" b = a.islower() print(b) 结果 False
//upper()方法和lower()方法一样,只是效果相反,将字符串里的字母全部变成大写
//isupper()方法和islower()方法一样,只是判断是否含字母且字母全部是大写
//swapcase()方法,将字符串里的英文字母大写变小写,小写变大写
a = "23545djhHWxhyTlBz%^&*" b = a.swapcase() print(b) 结果 23545DJHhwXHYtLbZ%^&*
//center()方法,两个参数,第一个参数设置宽度必须写,第二个参数是填充字符,可写可不写,不写的话默认用空格填充,但是只可以是一个字符,啥字符都可以但必须是一个!!!如"99"这个就不行,“9”就行,设置宽度,并且把原字符串放在中间,生成一个新的字符串,需要注意的是,设置的宽度必须大于原字符串的宽度,不然生成的字符串就是和原字符串一样
a = "djh" b = a.center(10) print(b) 结果 djh //这个新字符串一共有10个字符,把djh放在中间 a = "djh" b = a.center(10, "*") print(b) 结果 ***djh****
//ljust()方法,和cente()r一样,只是center()将字符串放中间,这个放最左边,所以参数一样,要求一样,rjust()就是将其放最左边,其余的一模一样
a = "djh" b = a.rjust(10, "*") print(b) 结果 *******djh a = "djh" b = a.ljust(10, "*") print(b) 结果 djh*******
//count()方法,计算某个子序列在一个区间内出现的次数,三个参数,第一个参数,自学列必写,第二个参数,从哪里开始找,可不写默认从头开始,第三个参数,到哪里结束,可不写默认到尾结束,需要注意的是,如果自己指定区间的话,start是算的,但是end是不算的,算到end前一个
a = "djhdjhdjh" b = a.count("jh") print(b) 结果 3 a = "djhdjhdjh" b = a.count("jh", 2) print(b) 结果 2 a = "djhdjhdjh" b = a.count("jh", 0, 7) print(b) 结果 2 a = "djhdjhdjh" b = a.count("jh", 0, 2) print(b) 结果 0 a = "djhdjhdjh" b = a.count("jh", 0, 3) print(b) 结果 1
//endswith()方法,判断是否以指定的子序列结尾,返回bool,三个参数,第二个参数,从哪里开始,可不写默认从头开始,第三个参数,到哪里结束,可不写默认到尾结束,需要注意的是,如果自己指定区间的话,start是算的,但是end是不算的,算到end前一个
a = "alex" b = a.endswith("ex") print(b) 结果 True a = "alex" b = a.endswith("e", 0, 2) print(b) 结果 False a = "alex" b = a.endswith("e", 0, 3) print(b) 结果 True
//startswith()方法,判断是否以指定的子序列开头,返回bool,三个参数,第二个参数,从哪里开始,可不写默认从头开始,第三个参数,到哪里结束,可不写默认到尾结束,需要注意的是,指定的区间的头是包括的,因为在python中呀,很多都是包括头不包括尾!
a = "alex" b = a.startswith("l", 1, 3) print(b) 结果 True a = "alex" b = a.startswith("a") print(b) 结果 True
//expandtabs(num)方法,一个参数,将字符串中的 '\t' 转换成空格,默认是转换成8给空格 ,也可以自己限定,而转换的原理是,相当于断句,以num个字符为一句,一直找,如果找了num给都没找到 \t 则直接就是这句了,如果在找某一句的过程中找到 \t 则将 \t 转换成剩下的个数个空格!讲得抽象噢,举个例子:
a = "djh\thwx\thyt\tlbz" b = a.expandtabs()//默认8个为一组 print(b) 结果 djh hwx hyt lbz//8个为一组,找第一组时找完djh还有5个字数,也就是改组还没找完就遇到了 \t 所以就将 \t 转换成5个空格 a = "djh\thwx\thyt\tlbz" b = a.expandtabs(2) print(b) 结果 djh hwx hyt lbz//两个为一组,找第一组时找完也没找到\t所以就直接是dj了,第二组时没找玩就碰到\t 所以就将剩下的字数也就是1给字数转换成空格 用处大概就是制个表吧 a = "asd\tgwefgeg\tsdbvsd\ndfgsdg\tasdg\t1235ersg" print(a.expandtabs(15)) 结果 asd gwefgeg sdbvsd dfgsdg asdg 1235ersg
//find()方法,判断是否以指定的子序列是否存在,存在就返回该子序列的第一个字符的下标,不存在就返回-1,三个参数,第二个参数,从哪里开始,可不写默认从头开始,第三个参数,到哪里结束,可不写默认到尾结束,需要注意的是,指定的区间的头是包括的,尾不包括,因为在python中呀,很多都是包括头不包括尾!
a = "djhhwxhytlbz" b = a.find("hyt") print(b) 结果 6 a = "djhhwxhytlbz" b = a.find("hyt", 0, 8) print(b) 结果 -1 a = "djhhwxhytlbz" b = a.find("hyt", 0, 9) print(b) 结果 6
//format()方法,格式化占位符,将占位符格式化成指定的字符,可以关键字格式化也可以位置参数格式化,也可以混着用,但是位置参数必须全部在关键字参数前面
a = "i am {name},age {age}!"//关键字格式化 print(a) b = a.format(name="djh", age=19) print(b) 结果 i am {name},age {age}! i am djh,age 19! a = "i am {0},age {1}!"//位置参数格式化 print(a) b = a.format("djh", 19) print(b) 结果 i am {0},age {1}! i am djh,age 19! a = "i am {0},age {age}!"//混着用 print(a) b = a.format("djh", age=19) print(b) 结果 i am {0},age {age}! i am djh,age 19!
//format_map()方法,与format()一样都是格式化占位符,但是format_map()传入的参数只可以是字典!需要注意的是,这个方法格式化的字符串占位符必须是关键字占位符,不可以是位置占位符!
a = "i am {name},age {age}!" b = a.format_map({"name": 'djh', "age": 19}) print(b) 结果 i am {0},age {age}! i am djh,age 19!
//index()方法和find()方法一模一样,也可以自己指定区间查找,也是包头不包尾,只是index()找不到直接报错,而find()找不到返回-1
//isalnum()方法,判断字符串里是否只含数字和字母,如果是则返回真,否则返回假
a = "adf124_" b = a.isalnum() print(b) 结果 False a = "adf124" b = a.isalnum() print(b) 结果 True
//isalpha()方法,判断字符串是否只含字母当然也可以是包括汉字,是则真不是则假
a = "ad是否f" b = a.isalpha() print(b) 结果 True a = "ad是否f12" b = a.isalpha() print(b) 结果 False
//isdecimal()和isdigit()和isnumeric()这三个方法都是判断字符串是否只含数字,是则真不是则假,但是isdigit()第二叼,最叼是isnumeric()
a = "123" b = a.isdecimal() c = a.isdigit() d = a.isnumeric() print(b, c, d) 结果 True True True a = "123a"(12.3) b = a.isdecimal() c = a.isdigit() d = a.isnumeric() print(b, c, d) 结果 False False False a = "②" b = a.isdecimal() c = a.isdigit() d = a.isnumeric() print(b, c, d) 结果 False True True a = "二" b = a.isdecimal() c = a.isdigit() d = a.isnumeric() print(b, c, d) 结果 False False True
//isidentifier()方法,判断字符串是否是python内置的关键字是则真不是则假
a = "int"(long def class......) b = a.isidentifier() print(b) 结果 True
//isprintable()方法,判断在屏幕打印的东西和原字符串的样子是否相同,是则真不是则假
a = "sdg" b = a.isprintable() print(b) 结果 True a = "sdg\na" b = a.isprintable() print(b) 结果 False //打印在屏幕的东西变了,原本是"adg\na" 打印在屏幕后变成 sdg a 不一样所以False
//isspace()方法,判断字符串是否存在且全部是空格!
a = " " b = a.isspace() print(b) 结果 True a = "sdfd sdf" b = a.isspace() print(b) 结果 False a = "" b = a.isspace() print(b) 结果 False
//title()方法,将字符串转换为标题的格式也就是首字母大写,只针对英文的标题有效,中文的不行,istitle()方法,判断字符串是否为标题的格式
a = "this is a test" b = a.istitle() a = a.title() c = a.istitle() print(b, c) 结果 False True
//join()方法,字符串的拼接,将给定的字符串a插入想插入的字符串b中的字符之间
a = "你是风儿我是沙" a = "_".join(a) print(a) 结果 你_是_风_儿_我_是_沙 a = "你是风儿我是沙" a = "djh".join(a) print(a) 结果 你djh是djh风djh儿djh我djh是djh沙 a = "你是风儿我是沙" a = "".join(a) print(a) 结果 你是风儿我是沙
//strip()方法,一个参数,默认去除字符串两边的空白,当执行默认时,它会连 \t \n 也帮你去掉,但当你有指定字符时, \t \n 就不会被去掉并且还会被看作是一个字符,当不是默认参数时,它删除字符有个很有趣的地方,无法描述,看例子
a = " \t \n djhhwxhytlbzd\t " b = a.strip()//无参数 print(b) 结果 djhhwxhytlbzd a = " \t \n djhhwxhytlbz\t dj" b = a.strip('dj')//有指定的字符串 print(b) 结果 djhhwxhytlbz //从两边的第一个找,左边第一个是 ' '所有无法删除,对于右边第一个是dj所以删得了! a = "djhhwxhytlbz" b = a.strip('djhzb') print(b) 结果 wxhytl//它是这么搞的,先从左边开始(哪边开始都一样啦)按最大匹配来删字符 第一次删除后字符串变成"hwxhytlbz"(最大匹配是djh) 第二次删除字符串变成"wxhytlbz" 这相当于 从第一次删除字符串之后变成的字符串(也就是"hwxhytlbz")来匹配,最大匹配是"h",所以变成"wxhytlbz",然后这次在左边无法删除了开始从右边,第三次删除之后是"wxhytlb"最大 匹配是"z" 第四次之后是"wxhytl"最大匹配是 "b"
//lstrip()方法是只从左边开始删,所有规则以及参数都和strip()方法相同,rstrip()方法只从右边开始删除,所有规则以及参数都和strip()方法相同
//maketrans()方法一般和translate()方法搭着用,maketrans()是弄一个对应关系,translate()是接受一个对应关系然后将字符串中的字符转换成对应的字符
a = "djhhwxhytlbz" m = str.maketrans("djh", "大帅哥")//弄了给对应关系,"d->大","j->帅","h->哥" b = a.translate(m)//接受一个对应关系并且将字符串里的字符转换成对应的字符 print(b) 结果 大帅哥哥wx哥ytlbz
//partition()方法,分割字符串返回一个三元组,从左边开始扫描指定的字符,找到后分割,同时保留那个分割符
a = "djhhwxhytlbz" b = a.partition("h") print(b) 结果 ('dj', 'h', 'hwxhytlbz')
//rpartition()方法,分割字符串返回一个三元组,从右边开始扫描指定的字符,找到后分割,同时保留那个分割符
a = "djhhwxhytlbz" b = a.rpartition("h") print(b) 结果 ('djhhwx', 'h', 'ytlbz')
//split()方法,分割字符串,两个参数,第一个参数"分割的标志串"默认是空格(多个空格连在在一起也无所谓,反正就是空白就ok),第二个参数,分割多少次默认是全部分割,返回一个列表!注意:不保留分割标志串
a = "djhhw xh ytlbz" b = a.rsplit() print(b) 结果 ['djhhw', 'xh', 'ytlbz'] a = "djhhw xh ytlbz" b = a.split(maxsplit=1)//因为想要在未指定第一个参数的时候指定第二给参数只可以用关键字赋值 print(b) 结果 ['djhhw', 'xh ytlbz'] a = "djhhwxhytlbz" b = a.split('h') print(b) 结果 ['dj', '', 'wx', 'ytlbz']//其实split()方法的原理是,从左边开始扫描直到扫描到分割标志串,然后将刚刚扫描到的字符串作为一个列表的元素如"dj",但为什么会出现第二个元素 ""呢,因为从第一个分割标志串到第二分割标志串之间没有任何字符,所有就是空字符串
//rsplit()方法和split()方法一模一样,只是rsplit()是从右边扫描到左边而split()是从左边扫描到右边
//splitlines()方法也是分割字符串,但是只可以以换行符为分割标志符,有一个参数默认是False,如果参数是True则保留 "\n" False则不保留
a = "djh\nhwx\nhyt\nlbz" b = a.splitlines() print(b) 结果 ['djh', 'hwx', 'hyt', 'lbz'] a = "djh\nhwx\nhyt\nlbz" b = a.splitlines(True) print(b) 结果 ['djh\n', 'hwx\n', 'hyt\n', 'lbz']
后记:
字符串支持 索引,切片,len(),迭代