马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 sunrise085 于 2020-4-3 19:36 编辑
前几天学习了一下python中字符串的方法,,发现字符串的处理方法真的蛮多的,小甲鱼整理的很很好。各种方法及注释见帖子。
在帖子中介绍了各种方法并加上了注释,然而又一些极为相似的方法,可能有些鱼油们会弄不清楚,我刚开始的时候也不清楚,然后就查阅资料,并亲自测试,现在总结如下,希望对广大鱼油们有所帮助。
第一组:isdecimal()、isdigit()和isnumeric()
这三个方法基本上都是判断字符串中是否只包含数字,但是却不尽相同。小甲鱼给出的注释如下:
isdecimal() 如果字符串只包含十进制数字则返回 True,否则返回 False。
isdigit() 如果字符串只包含数字则返回 True,否则返回 False。
isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False。
注释中的差别是:十进制数字、数字、数字字符。
就这么看,还真有点晕了。第一个好一些,限定了十进制,后面两个差别是啥啊?字符串中不都是字符吗?什么是数字,什么是数字字符?是不是一头雾水?
我来为大家解惑:
isdecimal()
True: Unicode数字,,全角数字(双字节)
False: 罗马数字,汉字数字
Error: byte数字(单字节)
isdigit()
True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字
False: 汉字数字
Error: 无
isnumeric()
True: Unicode数字,全角数字(双字节),罗马数字,汉字数字
False: 无
Error: byte数字(单字节)
举个例子:str1='Ⅷ'#罗马数字
print(str1,str1.isdecimal())
print(str1,str1.isdigit())
print(str1,str1.isnumeric())
print()
str2='五'
print(str2,str2.isdecimal())
print(str2,str2.isdigit())
print(str2,str2.isnumeric())
print()
str3=b'10010'#二进制
#print(str3,str3.isdecimal()) #这里是会报错的
print(str3,str3.isdigit())
#print(str3,str3.isnumeric())#这里是会报错的
print()
str4='123'#全角字符
print(str4,str4.isdecimal())
print(str4,str4.isdigit())
print(str4,str4.isnumeric())
程序输出结果如下:Ⅷ False
Ⅷ False
Ⅷ True
五 False
五 False
五 True
b'10010' True
123
123 True
123 True
123 True
第二组:casefold()和lower()
这两个方法都是大写转小写,小甲鱼中给出的注释如下:
casefold() 把整个字符串的所有字符改为小写
lower() 转换字符串中所有大写字符为小写
字面区别,一个是将所有字符改为小写,一个是将大写字符改为小写。听起来,好像第一个的功能更强大一些,但是小写字符也不需要改啊。这样想的话,两个方法意思不是一样的么?
其实,这两个方法是有区别的。查资料得到的是一下解释。lower()方法只能将ASCII码中的0x41到0x5a转换为0x61到0x7a,即将'A-Z'转换为'a-z',对其他字符无效;而casefold()可以将所有的有大小写区分的字符都进行转换,比如德语中的'ß'等。
我查了一下德语中的'ß',在德语中该字母本身是小写,所以lower()函数对其无效,而该字母还有其小写,即'ss',因此casefold()能对其进行转换。
此外我进行了一些其他语系字母的尝试,发现lower()函数不单单能转换'A-Z',还可以转换俄文字母和希腊字母等其他语系字母。
下面是我的一些尝试。str1='"ß"'
print(str1,'使用casefold转换',str1.casefold())
print(str1,'使用lower转换',str1.lower())
print()
str2='"AB T Ф Φ Β Ε Ω Π Δ Σ"'
print(str2,'\n使用casefold转换\n',str2.casefold())
print('使用lower转换\n',str2.lower())
程序结果"ß" 使用casefold转换 "ss"
"ß" 使用lower转换 "ß"
"AB T Ф Φ Β Ε Ω Π Δ Σ"
使用casefold转换
"ab t ф φ β ε ω π δ σ"
使用lower转换
"ab t ф φ β ε ω π δ σ"
这是自己学习过程中的一些总结,拿出来和大家交流交流,希望大家多多讨论,共同进步。
PS:发帖几个小时之后,才发现有些语系的字母无法正常显示,包括德语中的那个字母,和β有点相似,想了解的可以自己去搜一下“德语字母β”,还有一些其他的字母无法显示,我就删除了 |