python内置数据类型之字符串

1. 什么是字符串?

  1. 字符串是一个个字符组成的有序的序列,是字符的集合;
  2. 字符串用单引号、双引号或三引号括起来,同时使用反斜杠来转义特殊字符。;
  3. 字符是不可变的对象;
  4. 空格也是字符。

2. 字符串的定义

l = 'hello,mykernel'
print(l)
hello,mykernel

说明:

  • 一对单引号和一对双引号效果完全一样;
  • 三对单引号和三对双引号效果完全一样;
  • 三对引号可以定义多行字符串,且不需要转义符转义特殊字符。

3. 字符串的相关操作

1. 字符串的分隔

1. split()操作
print('l love python'.split())
# split()的()中指定分隔符
# 默认使用空格作为分隔符

# maxsplit=# 可以指定分隔的次数。
print('my name is  mykernel'.split('m',maxsplit=1))

#分隔符可以是任意字符串。
['l', 'love', 'python']
['', 'y name is  mykernel']
2. rsplit()

从右往左分隔。

print('my name is  mykernel'.rsplit('m',maxsplit=1))

#当不用maxsplit= 时候,split和rsplit效果一样,但是split效率更高。
['my name is  ', 'ykernel']
3. splitlines

按行进行分隔,返回分隔的结果,不带换行符。

l = """l love python
i am mykernel
"""
l.splitlines()
['l love python', 'i am mykernel']
4. partition

partition()总是返回一个三元组,它按传入的分割符分割一次。打印分割符的前半部分,分隔符本身和后半部分。

l = """l love python"""
l.partition(' ')

#partition() 不能不传入分隔符,只分隔一次,打印内容,为前半部分、分隔符和后半部分.
('l', ' ', 'love python')

2. 字符的大小写转换

1. upper()

小写转大写,upper()方法。

l = """l love python"""
l2= l.upper()
print(l2)
L LOVE PYTHON
2. lower()

大写转小写,lower()方法。

l2.lower()
'l love python'
3. title()和capitalize()

首字母转大写,title()和capitalize()方法

l = 'l love python'
str2 = l.title()
print(l.title())  #做文章的标题,每个字母的首字母大写
print(l.capitalize()) #做正文段落的开始,第一个首字母大写
L Love Python
L love python
4. casefold()

忽略大小写,casefold()方法

print(str2)
print(str2.casefold())
L Love Python
l love python

3. 字符串的修改

1. replace()

replace() 字符串的替换,只能从左到右的替换。

str = 'i love python'
str.replace('love python','am mykernel')  #前边是旧的字符串,后边是新的字符串。
'i am mykernel'

可以加上第三参数,控制修改的个数。

str = 'i very very very love python '
str.replace('very','非常',2)  #替换2个
'i 非常 非常 very love python '
2. strip()

strip()方法,移除前后的空白(\n,\t,\r)

str = '   mykernel   love  python   \n'
print(str)
str2 = str.strip()
print(str2)
   mykernel   love  python   

mykernel   love  python

去掉两端可以匹配到的字符

s = '<str>>'
s.strip('<r>')
'st'
  1. lstrip()只移除左侧部分;
  2. rstrip()只移除右侧部分。
3. ljust()、just()和center()

填充字符串。

  1. ljust() 右侧填充
  2. rjust() 左侧填充
  3. center()两侧填充
print('mykernel'.ljust(30))
print('mykernel'.rjust(30))
print('mykernel'.center(30))  #一边15个。。。。
mykernel                      
                      mykernel
           mykernel           

可以指定填充字符,但是不能指定多个字符。

print('mykernel'.ljust(30,'+'))
print('mykernel'.rjust(30,'#'))
print('mykernel'.center(30,'*'))  #一边15个。。。。
mykernel++++++++++++++++++++++
######################mykernel
***********mykernel***********

说明:需要填充的长度=指定的长度-原字符串长度,如果原字符串为8,用center()指定的长度为9,则只填充左侧。如果指定的宽度小于等于原厂不做任何操作。

4.字符串的查找

1.find()

find(sub[, start[, end]])
在指定的区间,从左到右查找,找到返回对应的索引值,没找到返回-1.

rfind(sub[, start[, end]])
在指定的区间,从右到左查找,找到返回对应的索引值,没找到返回-1.

str = 'i very very very love python '
print(str.find('very'))
print(str.find('very',5))
print(str.rfind('very',4))
print(str.rfind('very',-20,-1))
2
7
12
12
2. index()

index(sub[, start[, end]])
在指定的区间,从左到右。找到返回对应的索引值,没找到返回ValueError。

rindex(sub[, start[, end]])
在指定的区间,从右到左。找到返回对应的索引值,没找到返回ValueError。

3. count()

count(sub[, start[, end]])
在指定的区间,从左到右,统计子字符串sub出现的次数

str = 'i very very very love python '
print(str.count('very'))
print(str.count('very',5))
print(str.count('very',5,11))
3
2
1
len(str)  
##len()统计字符串的长度。个数即长度。
29

说明:
index()和count()方法的时间复杂的为O(n)

5. 字符串的判断

1. startwith()

startwith(value,[start,[stop]])
判断字符是不是以某个为单词开始的,返回true或者false。

str = 'i am mykernel,i very very very love python'
print(str.startswith('am'))
print(str.startswith('i'))

## 也可以指定范围进行匹配。
print(str.startswith('am',2,20)) #(2,20]

False
True
True
2. endswith()

同startwith
endswith(value,[start,[stop]])
判断字符是不是以某个为单词结束的,返回true或者false。

str = 'i am mykernel,i very very very love python'
print(str.endswith('am'))
print(str.endswith('python'))
False
True

6. 字符串拼接

1. +
'i'+' love'+' python'
'i love python'
2. join()
' '.join(['i'+' love'+' python'])
'i love python'

7. 字符串的格式化

字符串格式化是字符串拼接的一种手段。但是很重要,所以单独列出来。

1. printf style字符串格式化
s = 'i love %s' #%s为格式占位符,然后再其他地方可以将参数传入并替换该占位符。
s%('python',) #将python传入,替换占位符。
'i love python'

说明:一个占位符需要传入一个参数,当传入的参数和占位符个数不匹配的时候会报错。当传入的类型不匹配时会出现“TpyeError”错误。

当占位符是s%时候,隐式的调用了str(),其传入的可以为任意类型;

当占位符是r%时候,隐式的调用了repr()方法。

常见的占位符:

  1. s,获取传入对象的str方法的返回值,并将其格式化到指定位置
  2. r,获取传入对象的repr方法的返回值,并将其格式化到指定位置
  3. 整数:将数字转换成其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只支持0-255);字符:将字符添加到指定位置
  4. o,将整数转换成 八 进制表示,并将其格式化到指定位置
  5. x,将整数转换成十六进制表示,并将其格式化到指定位置
  6. d,将整数、浮点数转换成 十 进制表示,并将其格式化到指定位置
  7. e,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(小写e)
  8. E,将整数、浮点数转换成科学计数法,并将其格式化到指定位置(大写E)
  9. f, 将整数、浮点数转换成浮点数表示,并将其格式化到指定位置(默认保留小数点后6位)
  10. F,同上
  11. g,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是e;)
  12. G,自动调整将整数、浮点数转换成 浮点型或科学计数法表示(超过6位数用科学计数法),并将其格式化到指定位置(如果是科学计数则是E;)
  13. %,当字符串中存在格式化标志时,需要用 %%表示一个百分号
2. format字符串格式化

a. format方法可以使用花括号作为占位符,传入的参数将替换花括号。

s = 'i love {}' #{}作为占位符
s.format('python')
'i love python'

b. format方法的参数可以为多个,如果不在括号里指定其位置一一对应引入。

s ='i love {}, i am {}'
s.format('python','mykernel')  #按照位置传入
'i love python, i am mykernel'

c. format方法可以在花括号里填入位置数字,其后的参数按照位置引入,从0号位置开始

s ='i love {1}, i am {0}'
s.format('python','mykernel') 
'i love mykernel, i am python'

同一个位置的参数可以引入多次。

s ='i love {0}, i am {0}'
s.format('python','mykernel') 
'i love python, i am python'

d. format方法可以用字符作为占位符的标志,方便识别。

'i love {language},i am {name}'.format(language='python',name='mykernel')

'i love python,i am mykernel'

e. format方法的占位符可以混用,但是位置参数必须放在最前。

'my name is {0},i love {language},i am {age}'.format('mykernel',language='pyrhon',age=18)
'my name is mykernel,i love pyrhon,i am 18'

说明1:

  1. 占位符的个数大于参数个数的时候,会抛出异常IndexError。
  2. 占位符的个数小于参数个数的时候,若对应的占位符能匹配到值则不报错,匹配不到值会返回异常。
  3. 当占位符出现混用的情况时,位置参数不在最前会返回异常。

说明2:

  1. 通常使用2.6或之后的版本使用format方法,2.6之前使用printf style。
  2. 在format中,需要注意的是,在2.6版本中是不能省略大括号里面的数字或者关键字。

更多欢迎访问:http://www.mykernel.cn/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容