2020-10-18
python学习
00
请注意,本文编写于 1257 天前,最后修改于 1257 天前,其中某些信息可能已经过时。

目录

1. 什么是字符串?
2. 字符串的定义
3. 字符串的相关操作
1. 字符串的分隔
1. split()操作
2. rsplit()
3. splitlines
4. partition
2. 字符的大小写转换
1. upper()
2. lower()
3. title()和capitalize()
4. casefold()
3. 字符串的修改
1. replace()
2. strip()
3. ljust()、just()和center()
4.字符串的查找
1.find()
2. index()
3. count()
5. 字符串的判断
1. startwith()
2. endswith()
6. 字符串拼接
1. +
2. join()
7. 字符串的格式化
1. printf style字符串格式化
2. format字符串格式化

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版本中是不能省略大括号里面的数字或者关键字。

本文作者:mykernel

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!