疯狂Python讲义之变量和简单类型--深入使用字符串笔记4

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons

目录

1. 转义字符

2. 字符串格式化

3. 序列相关方法

4. 大小写相关方法

5. 查找、替换相关方法

6. 分割、连接方法


1. 转义字符

在字符串中可以使用反斜线进行转义;如果字符串本身包含反斜线,则需要使用 “\\” 表示,“\\” 就是转义字符。

s = 'Hello\n\world'
print(s)

2. 字符串格式化

Python 提供了“%”对各种类型的数据进行格式化输出

# 实例代码 
price = 123
print("The book's price  is %s" % price)

这行代码中的print 函数包含三个部分,第一部分是格式化字符串(它相当于字符串模板),该格式化字符串中包含一个“ %s ”占位符,它会被第三部分的变量或表达式的值代替; 第二部分固定使用“%”作为分隔符。

格式化字符串中的“ %s ”被称为转换说明符( Conversion Specifier ),其作用相当于一个占位符, 它会被后面的变量或表达式的值代替。“ %s '’指定将变量或值使用str() 函数转换为字符串。

如果格式化字符串中包含多个“ %s ”占位符,第三部分也应该对应地提供多个变量,并且使用圆括号将这些变量括起来.

在默认情况下, 转换出来的字符串总是右对齐的,不够宽度时左边补充空格。Python 也允许在最小宽度之前添加一个标志来改变这种行为, Python 支持如下标志。

  • : 指定左对齐。
  • : 表示数值总要带着符号(正数带“+” ,负数带“ _,, )。
  • :表示不补充空格, 而是补充0 。

对于转换浮点数, Python 还允许指定小数点后的数字位数:如果转换的是字符串, Python 允许指定转换后的字符串的最大字符数。这个标志被称为精度值,该精度值被放在最小宽度之后,中间用点( . )隔开。

price = 108
print("the book's price is %x" % price)
user = "Charli"
age = 8
# 格式化字符串有两个占位符,第三部分提供2个变量
print("%s is a %s years old boy" % (user , age))
num = -28
print("num is: %6i" % num)
print("num is: %6d" % num)
print("num is: %6o" % num)
print("num is: %6x" % num)
print("num is: %6X" % num)
print("num is: %6s" % num)
num2 = 30
# 最小宽度为0,左边补0
print("num2 is: %06d" % num2)
# 最小宽度为6,左边补0,总带上符号
print("num2 is: %+06d" % num2)
# 最小宽度为6,右对齐
print("num2 is: %-6d" % num2)
my_value = 3.001415926535
# 最小宽度为8,小数点后保留3位
print("my_value is: %8.3f" % my_value)
# 最小宽度为8,小数点后保留3位,左边补0
print("my_value is: %08.3f" % my_value)
# 最小宽度为8,小数点后保留3位,左边补0,始终带符号
print("my_value is: %+08.3f" % my_value)
the_name = "Charlie"
# 只保留3个字符
print("the name is: %.3s" % the_name) # 输出Cha
# 只保留2个字符,最小宽度10
print("the name is: %10.2s" % the_name)

3. 序列相关方法

字符串本质上就是由多个字符组成的,因此程序允许通过索引来操作字符。

Python 字符串直接在方括号( [])中使用索引即可获取对应的字符, 字符串中第一个字符的索引为0 、第二个字符的索引为1,后面各字符依此类推。此外, Python 也允许从后面开始计算索引,最后一个字符的索引为-1,倒数第二个字符的索引为-2······依此类推。

除可获取单个字符之外,也可在方括号中使用范围来获取字符串的中间“一段”(被称为子串)。

允许省略起始索引或结束索引。如果省略起始索引,相当于从字符串开始处开始截取;如果省略结束索引,相当于截取到字符串的结束处。

Python 字符串还支持用in 运算符判断是否包含某个子串

如果要获取字符串的长度,则可调用Python 内置的len()函

使用全局内置的min()和max()函数获取字符串中最小字符和最大字符

s = 'crazyit.org is very good'
# 获取s中索引2处的字符
print(s[2]) # 输出a
# 获取s中从右边开始,索引4处的字符
print(s[-4]) # 输出g
# 获取s中从索引3处到索引5处(不包含)的子串
print(s[3: 5]) # 输出zy
# 获取s中从索引3处到倒数第5个字符的子串
print(s[3: -5]) # 输出zyit.org is very
# 获取s中从倒数第6个字符到倒数第3个字符的子串
print(s[-6: -3]) # 输出y g
# 获取s中从索引5处到结束的子串
print(s[5: ]) # 输出it.org is very good
# 获取s中从倒数第6个字符到结束的子串
print(s[-6: ]) # 输出y good
# 获取s中从开始到索引5处的子串
print(s[: 5]) # 输出crazy
# 获取s中从开始到倒数第6个字符的子串
print(s[: -6]) #输出crazyit.org is ver
# 判断s是否包含'very'子串
print('very' in s) # True
print('fkit' in s) # False
# 输出s的长度
print(len(s)) # 24
# 输出'test'的长度
print(len('test')) # 4
# 输出s字符串中最大的字符
print(max(s)) # z
# 输出s字符串中最大的字符
print(min(s)) # 空格

4. 大小写相关方法

Python 是“自带文档”的。此处需要读者简单掌握两个帮助函数。

  • dir() : 列出指定类或模块包含的全部内容(包括函数、方法、类、变量等)。
  • help() : 查看某个函数或方法的帮助文档。

 

a = 'our domain is crazyit.org'
# 每个单词首字母大写
print(a.title())
# 每个单词首字母小写
print(a.lower())
# 每个单词首字母大写
print(a.upper())

5. 删除空白

str 还提供了如下常用的方法来删除空白。

  • strip () :  删除字符串前后的空白。
  • lstrip() :   删除字符串前面(左边)的空白。
  • rstrip () : 删除字符串后面(右边)的空白。

需要说明的是, Python 的str 是不可变的(不可变的意思是指,字符串一旦形成,它所包含的字符序列就不能发生任何改变),因此这三个方法只是返回字符串前面或后面空白被删除之后的副本, 并没有真正改变字符串本身。

lstrip () 方法默认删除字符串左边的空白,但如果为该方法传入指定参数,则可删除该字符串左边的指定字符。

s = '  this is a puppy  '
# 删除左边的空白
print(s.lstrip())
# 删除右边的空白
print(s.rstrip())
# 删除两边的空白
print(s.strip())
# 再次输出s,将会看到s并没有改变
print(s)
s2 = 'i think it is a scarecrow'
# 删除左边的i、t、o、w字符
print(s2.lstrip('itow'))
# 删除右边的i、t、o、w字符
print(s2.rstrip('itow'))
# 删除两边的i、t、o、w字符
print(s2.strip('itow'))

5. 查找、替换相关方法

str 还提供了如下常用的执行查找、替换等操作的方法。

  • startswith():判断字符串是否以指定子串开头。
  •  endswith ():判断字符串是否以指定子串结尾。
  • find (): 查找指定子串在字符串中出现的位置,如果没有找到指定子串,则返回- I 。
  • index () : 查找指定子串在字符串中出现的位置,如果没有找到指定子串,则引发ValueError错误。
  • replace(): 使用指定子串替换字符串中的目标子串。
  • translate (): 使用指定的翻译映射表对字符串执行替换。
s = 'crazyit.org is a good site'
# 判断s是否以crazyit开头
print(s.startswith('crazyit'))
# 判断s是否以site结尾
print(s.endswith('site'))
# 查找s中'org'的出现位置
print(s.find('org')) # 8
# 查找s中'org'的出现位置
print(s.index('org')) # 8
# 从索引为9处开始查找'org'的出现位置
#print(s.find('org', 9)) # -1
# 从索引为9处开始查找'org'的出现位置
# print(s.index('org', 9)) # 引发错误
# 将字符串中所有it替换成xxxx
print(s.replace('it', 'xxxx'))
# 将字符串中1个it替换成xxxx
print(s.replace('it', 'xxxx', 1))
# 定义替换表:97(a)->945(α),98(b)->945(β),116(t)->964(τ),
table = {97: 945, 98: 946, 116: 964}
print(s.translate(table)) # crαzyit.org is α good site

从上面程序可以看出, str 的trans l a te ()方法需要根据翻译映射表对字符串进行查找、替换。在上面程序中我们自己定义了一个翻译映射表,这种方式需要开发者能记住所有字符的编码,这显然不太可能。为此, Pyth on 为由类提供了一个maketra ns()方法,通过该方法可以非常方便地创建翻译映射表。

假如定义a -> 1 、b ->2、c->3 的映射, 程序只要将需要映射的所有字符作为maketrans () 方法的第一个参数,将所有映射的目标字符作为maketrans () 方法的第二个参数即可。 

6. 分割、连接方法

Python 还为str 提供了分割和连接方法。

  • split(): 将字符串按指定分割符分割成多个短语。
  • join ():将多个短语连接成字符串。

str 的split()和join () 方法互为逆操作一 split () 方法用于将字符串分割成多个短语:而join () 方法则用于将多个短语连接成字符串。

s = 'crazyit.org is a good site'
# 使用空白对字符串进行分割
print(s.split()) # 输出 ['crazyit.org', 'is', 'a', 'good', 'site']
# 使用空白对字符串进行分割,最多只分割前2个单词
print(s.split(None, 2)) # 输出 ['crazyit.org', 'is', 'a good site']
# 使用点进行分割
print(s.split('.')) # 输出 ['crazyit', 'org is a good site']
mylist = s.split()
# 使用'/'为分割符,将mylist连接成字符串
print('/'.join(mylist)) # 输出 crazyit.org/is/a/good/site
# 使用','为分割符,将mylist连接成字符串
print(','.join(mylist)) # 输出 crazyit.org,is,a,good,site

 

 

猜你喜欢

转载自blog.csdn.net/XieWinter/article/details/94007969