C语言和Python经常弄混,尤其总是忍不住给Python后面加分号……干脆给自己做个笔记省的忘了。。。(小甲鱼那边的)
九、字符串
- 字符串使用范围广、且极其方便:
'''判断是否是回文数'''
>>> x = '123454321'
>>> '是回文数' if x == x[::-1] else '不是回文数'
'是回文数'
- 字符串的各种方法:
2.1 大小写转换
>>> x = 'I love FishC'
>>> x.capitalize()
'I love fishc'
>>> x.casefold()
'i love fishc'
>>> x.title()
'I Love Fishc'
>>> x.swapcase()
'i LOVE fISHc'
>>> x.upper()
'I LOVE FISHC'
>>> x.lower()
'i love fishc'
'''casefold可以处理其他语言的小写,lower只能处理英文字母'''
2.2 左中右对齐 首先都要指定宽度,如果width比源字符串总长度小,则按源字符串输出:
>>> x = '你好,世界!'
>>> x.center(10)
' 你好,世界! '
>>> x.ljust(10)
'你好,世界! '
>>> x.rjust(10)
' 你好,世界!'
>>> x.zfill(10)
'0000你好,世界!'
还可以对空白做补充:
>>> x = '你好,世界!'
>>> x.center(10, '0')
'00你好,世界!00'
>>> x.ljust(10, '我')
'你好,世界!我我我我'
2.3 查找
>>> x = '上海自来水来自海上'
'''查找次数'''
>>> x.count('海')
2
>>> x.count('海', 0, 5)
1
'''查找索引'''
>>> x.find('海')
1
>>> x.rfind('海')
7
>>> x.rfind('海',0,5)
1
>>> x.rfind('海',4,9)
7
这个查找索引和index()的区别在于,当查找的内容不存在于字符串时,find()和rfind()返回-1,而index()报错 2.4 替换 把Tab全部替换成空格:
>>> code = '''
My name is Buranny.
Your name is Aamy.'''
>>> new_code = code.expandtabs(4)
>>> new_code
'\n My name is Buranny.\n Your name is Aamy.'
>>> print(new_code)
My name is Buranny.
Your name is Aamy.
新字符串替换旧字符串,count表示替换次数,一般默认为-1,表示全部替换:
>>> '我爱我家'.replace('我', '你', -1)
'你爱你家'
>>> '我爱我家'.replace('我', '你', 1)
'你爱我家'
首先给出转换规则,再用translate进行转换:
>>> table = str.maketrans('ABCDEFG', '1234567')
>>> 'My Boy Lika Apple'.translate(table)
'My 2oy Lika 1pple'
>>> 'My Boy Lika Apple'.translate(str.maketrans('ABCDEFG', '1234567'))
'My 2oy Lika 1pple'
>>> 'My Boy Lika Apple'.translate(str.maketrans('ABCDEFG', '1234567', 'Myle'))
' 2o Lika 1pp'
2.5 判断 判断位置:
>>> x = '我爱python'
>>> x.startswith('爱')
False
>>> x.startswith('我')
True
>>> x.startswith('爱', 1, 5)
True
>>> x.endswith('on')
True
>>> x.endswith('py',0 ,3)
False
>>> x.endswith('py',0 ,4)
True
>>> if x.startswith(('我', '你', '他')):
print('yes')
yes
判断大小写:
>>> x = 'I love Python'
>>> x.istitle()
False
>>> x = 'I Love Python'
>>> x.istitle()
True
>>> x = 'I AM SINGER'
>>> x.isupper()
True
>>> x.upper().isupper()
True
>>> x = 'I AM SINGER'
>>> x.islower()
False
判断类型:
>>> x = 'I love Python'
>>> x.isalpha()
False
>>> ' \n'.isspace()
True
>>> 'I love Python'.isprintable()
True
>>> 'I love Python\n'.isprintable()
False
判断数字类型: 具体见isdigit()、isnumeric()和isdecimal()的区别。在isalpha()、isdigit()、isnumeric()和isdecimal()中,任意一个返回True,isalnum()都返回True。
判断是否是一个合法的python标识符(变量名必须是一个合法的python标识符):
>>> 'my god'.isidentifier()
False
>>> 'my_god'.isidentifier()
True
>>> 'my10'.isidentifier()
True
>>> '10my'.isidentifier()
False
判断是否为python的保留标识符(if、for之类的):
>>> import keyword
>>> keyword.iskeyword('if')
True
>>> keyword.iskeyword('py')
False
2.6 截取
>>> ' 去除左侧的空白'.lstrip()
'去除左侧的空白'
>>> '去除右侧的空白 '.rstrip()
'去除右侧的空白'
>>> ' 去除两侧的空白 '.strip()
'去除两侧的空白'
其中,chars=None表示什么都没有,就是去除空白的意思,可以在这里传入要去除的字符串:
>>> 'www.ilovefishc.com'.lstrip('wcom.')
'ilovefishc.com'
>>> 'www.ilovefishc.com'.rstrip('wcom.')
'www.ilovefish'
>>> 'www.ilovefishc.com'.strip('wcom.')
'ilovefish'
'''
在这里,以第一个举例,是对'www.ilovefishc.com'这个字符串从左到右按照字符进行查找,直到不在被删除字符串为止'wcom.':
首先,三个'w'都在'wcom.'中,删除;
接着,'.'在'wcom.'中,删除;
然后,'i'不在'wcom.'中,停止查找。
并不是整体删除'wcom.'的意思。
'''
整体删除字符串:
>>> 'www.ilovefishc.com'.removeprefix('www.')
'ilovefishc.com'
>>> 'www.ilovefishc.com'.removesuffix('.com')
'www.ilovefishc'
2.7 拆分和拼接 拆分:
>>> 'www.ilovefishc.com'.partition('.')
('www', '.', 'ilovefishc.com')
>>> 'www.ilovefishc.com'.rpartition('.')
('www.ilovefishc', '.', 'com')
>>> 'www.ilovefishc.com'.split('.')
['www', 'ilovefishc', 'com']
>>> 'www.ilovefishc.com'.split('.',1)
['www', 'ilovefishc.com']
>>> 'www.ilovefishc.com'.rsplit('.',1)
['www.ilovefishc', 'com']
>>> '你\n我\r他\n\r她'.splitlines()
['你', '我', '他', '', '她']
>>> '你\n我\r他\n\r她'.splitlines(True)
['你\n', '我\r', '他\n', '\r', '她']
拼接:
>>> '.'.join(['www', 'ilovefishc', 'com'])
'www.ilovefishc.com'
>>> x = 'fishc'
>>> x += x
>>> x
'fishcfishc'
>>> ''.join(('fishc', 'fishc'))
'fishcfishc'
- format()语法格式化字符串:
>>> '1+2={}, 2^2={}, 3^3={}'.format(1+2, 2*2, 3*3*3)
'1+2=3, 2^2=4, 3^3=27'
>>> '{}看到{}就很激动'.format('我', '你')
'我看到你就很激动'
>>> '{1}看到{0}就很激动'.format('我', '你')
'你看到我就很激动'
>>> '{0}{0}{1}{1}'.format('是', '非')
'是是非非'
>>> '我叫{name},我爱{fav}。'.format(fav='Python', name='三耳01')
'我叫三耳01,我爱Python。'
>>> '我叫{name},我爱{0},{0}很好玩。'.format('Python', name='三耳01')
'我叫三耳01,我爱Python,Python很好玩。'
>>> '{}, {}, {}'.format(1, '{}', 2)
'1, {}, 2'
>>> '{}, {{}}, {}'.format(1, 2)
'1, {}, 2'
更多用法: [[fill]align][sign][#][0][width][grouping_option][.precision][type] 3.1 [align]
>>> '{:^10}'.format('apple')
' apple '
>>> '{1:<6}{0:>6}'.format('boy', 'cat')
'cat boy'
>>> '{c:<6}{b:>6}'.format(b='boy', c='cat')
'cat boy'
>>> '{:09}'.format(55)
'000000055'
>>> '{:09}'.format(-55)
'-00000055'
>>> '{:%^9}'.format(55)
'%%%55%%%%'
>>> '{:%>9}'.format(-55)
'%%%%%%-55'
>>> '{:%=9}'.format(-55)
'-%%%%%%55'
>>> '{:0=9}'.format(-55)
'-00000055'
3.2 [sign]
>>> '{:+} {:+}'.format(1, -1)
'+1 -1'
>>> '{:-} {:-}'.format(1, -1)
'1 -1'
>>> '{: } {: }'.format(1, -1)
' 1 -1'
设置千分位的分隔符:
>>> '{:,}'.format(1234567)
'1,234,567'
>>> '{:_}'.format(1234567)
'1_234_567'
精度(不允许用在整数上):
>>> '{:.2f}'.format(3.1415)
'3.14'
>>> '{:.2g}'.format(3.1415)
'3.1'
>>> '{:.6}'.format('I love Python')
'I love'
类型type: 整数:
>>> '{:b}'.format(80)
'1010000'
>>> '{:c}'.format(80)
'P'
>>> '{:d}'.format(80)
'80'
>>> '{:o}'.format(80)
'120'
>>> '{:x}'.format(80)
'50'
>>> '{:#b}'.format(80)
'0b1010000'
小数:
>>> '{:e}'.format(30)
'3.000000e+01'
>>> '{:f}'.format(3.1415)
'3.141500'
>>> '{:g}'.format(123456789)
'1.23457e+08'
>>> '{:g}'.format(1234.56789)
'1234.57'
>>> '{:%}'.format(0.98)
'98.000000%'
>>> '{:.2%}'.format(0.98)
'98.00%'
>>> '{:.{prec}%}'.format(3.1415, prec=2)
'314.15%'
>>> '{:{fill}{align}{width}.{prec}{ty}}'.format(3.1415, fill='+', align='^', width=10, prec=3, ty='g')
'+++3.14+++'
>>> '{:.4g}'.format(3.1415)
'3.142'
>>> '{:.3%}'.format(3.1415)
'314.150%'
f/F-字符串:可以看作是format()的一个语法糖,进一步简化操作,并且带来了功能上的提升(python3.6的产物,format()兼容性更高,所以更广泛):
>>> '1+2={}, 2^2={}, 3^3={}'.format(1+2, 2*2, 3*3*3)
'1+2=3, 2^2=4, 3^3=27'
>>> f'1+2={1+2}, 2^2={2*2}, 3^3={3*3*3}'
'1+2=3, 2^2=4, 3^3=27'
>>> '{:010}'.format(-55)
'-000000055'
>>> f'{-55:010}'
'-000000055'
>>> '{:,}'.format(1234567)
'1,234,567'
>>> F'{1234567:,}'
'1,234,567'
|