Python数据类型-字符串
1、字符串:
字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。
如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识,比如:
'I\'m \"OK\"!' # 表示的字符串内容是:I'm "OK"!
转义字符\可以转义很多字符,比如:
\n:表示换行
\t:表示制表符
字符\本身也要转义,所以\\表示的字符就是\,可以在Python的交互式命令行用print()打印字符串看看:
>>> print('I\'m ok.') I'm ok. >>> print('I\'m learning\nPython.') I'm learning Python. >>> print('\\\n\\') \ \
如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义:
>>> print('\\\t\\') \ \ >>> print(r'\\\t\\') \\\t\\
如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用'''...'''的格式表示多行内容,可以自己试试:
>>> print('''line1 ... line2 ... line3''') line1 ... line2 ... line3 >>> print('''line1 ... line2 ... line3 ... ''') line1 line2 line3
注意在交互式命令行输入多行内容时,提示符由>>>变为...,提示你可以接着上一行输入。如果写成程序,就是:
print(''' line1 line2 line3''')
字符串的其他用法:
字符串乘法: print(10*'a') # 打印 10 个 a
例子1:
space = ' ' print("读万卷书,不如行万里路") print(space*2+"行万里路,不如阅人无数") print(space*4+"阅人无数,不如名师指路") ''' 读万卷书,不如行万里路 行万里路,不如阅人无数 阅人无数,不如名师指路 '''
例子2:
s = 'ilovepython' print(s[1:5]) # love,字符串切片,顾头不顾尾,头:s[1]=l,尾巴:s[5]=p,不会打印 s[5]的值
2、格式化:
# 法1: web = ("name:{names},address:{url}".format(names="123", url="www.123.com")) print(web) # 法2: web = ''' name:{names} address:{url}'''.format(names="123", url="www.123.com") print(web) # 法3:个人喜欢这种 web = ''' name:%s address:%s ''' % ('123', 'www.123.com') print(web) # 法4: web = ''' name:{0} address:{1} ''' .format('123', 'www.123.com') print(web)
'''
name:123,address:www.123.com
name:123
address:www.123.com
name:123
address:www.123.com
name:123
address:www.123.com
'''
3、索引:
s = 'hello kitty %s is %d' % ('hjc', 18) print(s[0]) # h print(s[1]) # e print(s[2]) # l print(s[3]) # l print(len(s)) # 21,获取字符串长度
4、切片:
s = 'hello kitty hjc is 18' print(s[0::2]) # hloktyhci 8,步长跳着切,每隔2个 print(s[:2]) # he,获取前两个字符,等价 s[0:2] print(s[2:]) # llo kitty hjc is 18
5、常用方法:
st = 'hello kitty {name} is {age}' a = '123' b = 'abc' c = '444' d = '---'.join([a, b, c]) # 列表转字符串,然后用 ----,拼接起来,列表里面是需要拼接起来的内容,必须是字符串,用什么拼接 print(d) # 123---abc---444 print(st.count('l')) # 统计元素个数 格式:str.count('a',#,#) # 表示范围 # 2 print(st.center(50, '-')) # 字符串居中,整体字符串长度为50,两边用 ‘-’ 填充 # -----------hello kitty {name} is {age}------------ print(st.startswith('he')) # 判断字符串是否为整个字符串的开头 # True print(st.endswith('tty3')) # 判断字符串是否为整个字符串的结尾 # False print('126.999'.isdigit()) # 判断是否为整数 # False print(st.find('t')) # 检测括号内 str 是否包含在 string 中,并将索引值返回,不存在则返回 -1,有范围 #,# # 3 print(st.format(name='alex', age='53')) # 格式化输出,传递参数 # hello kitty alex is 53 print('my Title. ?'.lower()) # 把字符串内的大写变小写 # my title. ? print('my Title. ?'.upper()) # 把字符串内的小写变大写 # MY TITLE. ? # 从左开始以什么作为分隔符,并把分割的内容以列表形式展现,# 为匹配多少个分隔符 print('my title title'.split(' ', 1)) # ['my', 'title title'] # 从左到右替换字符串中的源内容为目标,#:如果字符串中有多个匹配源,#为匹配多少个,默认不加#为全部替换 print('\tmy tiLtle title'.replace('tiLtle', 'le', 1)) # my le title # 把字符串的两边的空格和换行符去掉,做判断的时候要加,不然会匹配 str\n,可以加内容,指定去除内容 strip("*"):把 * 去掉 print('\n my \nTitle. ? '.strip()) # my # Title. ?
6、不常用方法:
st = 'hello kitty {name} is {age}' st2 = 'hjc' a = '123' b = 'abc' c = '444' print(st.index(st2)) # 检测子字符串在父字符串的索引位置 格式:父字符串.index(子字符串) # 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。 格式:istring.expandtabs(tabsize=8) print(st.expandtabs()) print(st.capitalize()) # 首写字母大写 print(st.format_map({'name': 'alex', 'age': '53'})) # 以字典形式传递参数 print(st.index('t')) # 存在在返回索引值,不存在则直接返回错误,建议用 find print(st.isalnum()) # 判断字符串是否为纯字母和纯数字,不能包含空格和特殊字符 print('12345678'.isdecimal()) # 判断字符串是否为正整数 print('126.999'.isnumeric()) # 判断是否为整数,跟 isdigit 相同,识别的比较全,一,壹,都能识别 print('Abc'.isidentifier()) # 判断是否为纯字母,不能包含除字母外的内容 print(a.isalnum()) # 检测是否为纯字母和纯数字 print(a.isalpha()) # 检测是否为纯字母 print(a.isdigit()) # 检测是否为纯数字 print('bAc'.islower()) # 判断是否为纯小写字母 print('ABa'.isupper()) # 判断是否为纯大写字母 print(' e'.isspace()) # 判断是否为纯空格 print('Yy title'.istitle()) # 检测每串字符串的首个字母是否为大写 例:The,School:真;The,school:假 print("hello\n wo\nrld".splitlines()) # 按 \n 分割 print('my Title. ?'.swapcase()) # 把字符串内的小写变大写,大写变小写 print('my Title. ?'.ljust(50, '*')) # 跟 center 相似,字符串居左,填充内容在右边 print('my Title. ?'.rjust(50, '*')) # 跟 center 相似,字符串居右,填充内容在左边 print('\n my \nTitle. ? '.lstrip()) # 把字符串的左边的空格和换行符去掉 print('\n my \nTitle. ? '.rstrip()) # 把字符串的右边的空格和换行符去掉 print('my title title'.rfind('c')) # 从右往左找字符串,找到并打印索引值,否则返回 -1 print('my title title'.rsplit('i', 1)) # 从右开始,跟上面一样,后面数字是分割几次 print('my title title'.title()) # 把每个单词的首写字母变成大写 print('str1' in 'hello') # 判断 str1 是否在 hello 内,是:返回 true,否,返回 false print(a.partition("中间部分")) # 把一字符串分为,前中后三个部分,并把结果输出为元组形式,括号内输入的是中间的部分 print("hello world".zfill(50)) # 一共占50个字符,不够的 0,来补 b = repr("he is happy \n yes") # 把 \n 转换成字符串,方便机器阅读成字符串,人读 \n 是换行 print(b)