Python编程思想(4):字符串类型

  《Python编程思想》总目录

目录

1. 字符串和转义符

2. 字符串内建函数

3. 字符串高级操作

4. 保持字符串的原汁原味

5. 长字符串


字符串的意思就是“一串字符”,也可以看做是字符的序列。比如“Helo, Mike”是一个字符串,“How are you?”也是一个字符串。Python要求字符串必须使用引号括起来,不过Python与大多数编程语言不同,在Python中,既允许使用单引号(‘)表示字符串,也允许使用双引号(")表示字符串。但单引号和双引号必须成对出现。

1. 字符串和转义符

字符串的内容几乎可以包含任何字符,例如,英文字符、数字、汉字等。

PS:Python3.x对中文字符支持较好,但 Python2.x则要求在源程序中增加“#coding:utf-8”才能支持中文字符。

下面的程序是字符串的基本用法:

str1 = 'hello world'           # 使用单引号表示字符串
str2 = "Python从菜鸟到高手"     # 使用双引号表示字符串
print(str1)
print(str2)

但需要说明的是,Python并没有我们想象的那么聪明,如果字符串内容本身包含了单引号或双引号,就可能需要进行特殊处理。这里说的可能是指如果用双引号表示字符串,那么字符串中可以包含单引号,但不能直接包含双引号,如果用单引号表示字符串,那么字符串中可以有双引号,但不能直接包含单引号。那么如果非要包含单引号和双引号该怎么办呢?这就需要用到本节要讲的转义符。

先看第一种处理方式。假如字符串内容中包含了单引号,则可以使用双引号将字符串括起来。

例如,下面的代码是错误的。

str3=’I'm a coder'

由于上面字符串中包含了单引号,此时 Python会将字符串中的单引号与字符串中第1个单引号配对,这样就会把'I'当成字符串,而后面的 m a coder'就变成了多余的内容,从而导致语法错误。

为了避免这种问题,可以将上面代码改为如下形式:

str3 = "I'm a coder"

上面代码使用双引号将字符串括起来,此时 Python就会把字符串中的单引号当成字符串内容,而不是和字符串开始的引号配对。假如字符串内容本身包含双引号,则可使用单引号将字符串括起来,例如如下代码:

str4 = '"The weather is so hot today, it is already sweating!", said Mike'

接下来看第2种处理方式:转义符。 Python允许使用反斜线(/)将字符串中的特殊字符进行转义。假如字符串既包含单引号,又包含双引号,此时必须使用转义字符,例子代码如下:

str5 = '"The weather is so hot today, it\'s already sweating!", said Mike'

2. 字符串内建函数

Python 为字符串提供了40多个内建函数,在这一节只介绍其中几个常用的方法,其他的方法在使用上大同小异。

str1 = " Hello world! 你好"
str2 = "world"

#返回字符串的长度:len(str)
print('str1的长度:',len(str1))

#对字符串进行分割:split(str),分割符为str,此处以空格进行分割
print('str1以空格分割的结果:',str1.split(' '))

#删除字符串首尾的空格
print('str1删除首尾空格:',str1.strip())

#返回 str2 在 str1 里面出现的次数,如果 begin 或者 end 指定则返回指定范围内 str2出现的次数
print('str2在str1中出现的次数:',str1.count(str2))
print('str2在str1中出现的次数(指定范围):',str1.count(str2,10,22))

#检查字符串是否以 obj 结束,如果begin 或者 end 指定则检查指定的范围内是否以 obj 结束
#如果是,返回 True,否则返回 False.
print('str1是否以 str2结尾:',str1.endswith(str2))
print('str1是否以 str2结尾(指定范围):',str1.endswith(str2,10,19))

#检测 str2是否包含在字符串str1中,如果指定范围 begin 和 end ,则检查是否包含在指定范围内,
#如果包含返回开始的索引值,否则返回-1
print('str1中是否包含str2:',str1.find(str2))
print('str1中是否包含str2(指定范围):',str1.find(str2,6,22))

运行结果如下图所示:

     3. 字符串高级操作

本节介绍一些与字符串相关的高级操作

(3) 反转字符串

所谓反转字符串,就是将字符串按字符顺序倒序排列,例如,python编程nohtyp。这里提供了2种方法用于字符串反转。

方法1: 使用join和reversed函数

s = "python"
for c in reversed(s):
    print(c, end=" ")
print()
rs = ''.join(reversed(s))
print(rs)

输出结果如下图所示:

其中reversed函数返回字符串s的一个逆序可迭代的对象(每一个对象元素是一个字符)。然后再用join函数将这些字符连接起来,中间的分隔符是空串(长度为0的字符串),所以就会输出逆序字符串了。

#方法2

print(s[::-1])

这种方法利用了切片技术,如果step是-1,就会逆序输出

(2)字符串切片操作

字符串的分片就是截取字符串。截取字符串需要指定开始截取的位置(begin)、截取结束的位置(end)、步长(step)。分片操作与引用数组元素类似,使用一对中括号。只是在中括号中要指定begin、end和step中间用冒号(:)分隔。下面是一个字符串分片的例子。

s1 = "hello world"
#  在字符串中使用索引
print(s1[0])            # 获取s1的第1个字符,运行结果:h
print(s1[2])            # 获取s1的第3个字符,运行结果:l
#  在字符串中使用分片
print(s1[6:9])                 # 获取s1从第7个字符往后的3个字符,运行结果:wor
print(s1[6:])           # 获取s1从第7个字符后的所有字符,运行结果:world
print(s1[::2])          # 在s1中每隔一个取一个字符,运行结果:hlowrd

输出结果如下图所示:

 

4. 保持字符串的原汁原味

本文前面讲过转义符(\)的应用,其实转义符不光能输出单引号和双引号,还能控制字符串的格式,例如,使用“\n”表示换行,如果在字符串中含有“\n”,那么“\n”后的所有字符都会被移到下一行。

print('Hello\nWorld')

输出如下结果:

Hello

World

如果要混合输出数字和字符串,并且换行,可以先用str函数将数字转换为字符串,然后在需要换行的地方加上“\n”。

print(str(1234) + "\n" + str(4321))

输出结果如下:

1234

4321

 不过有的时候,我们不希望Python解析器转义特殊字符,希望按原始字符串输出,这时需要使用repr函数。

print(repr("Hello\nWorld"))

输出结果如下:

'Hello\nWorld'

使用repr函数输出的字符串,会使用一对单引号括起来。

其实如果只想输出“\n”或其他类似的转义符,也可以使用两个反斜杠输出“\”,这样“\”后面的n就会被认为是普通的字符了。

print("Hello\\nWorld")

输出结果如下:

Hello\nWorld

除了前面介绍的repr和转义符外,在字符串前面加“r”也可以原样输出字符串。

print(r"Hello\nWorld")

输出结果如下:

Hello\nWorld

现在总结一下,如果让一个字符串按原始内容输出(不进行转义),有如下3种方法。

  • repr函数
  • 转义符(\)
  • 在字符串前面加“r”

下面的例子完整地演示了str和repr函数的用法。

# 输出带“\n"的字符串,运行结果:<hello
#                         world>
print("<hello\nworld>")
# 用str函数将1234转换为数字,运行结果:1234
print(str(1234))
# 抛出异常,len函数不能直接获取数字的长度
#print(len(1234))
#  将1234转换为字符串后,获取字符串长度,运行结果:4
print(len(str(1234)))
#  运行结果:<hello
#         world>
print(str("<hello\nworld>"))
#  运行结果:13
print(len(str("<hello\nworld>")))
#  运行结果:'<hello\nworld>'
print(repr("<hello\nworld>"))
#  运行结果:16
print(len(repr("<hello\nworld>")))
#  使用转义符输出“\”,输出的字符串不会用单引号括起来,运行结果:hello\nworld
print("<hello\\nworld>")
#  运行结果:14
print(len("<hello\\nworld>"))
#  在字符串前面加“r”,保持字符串原始格式输出,运行结果:hello\nworld
print(r"<hello\nworld>")
#  运行结果:14
print(len(r"<hello\nworld>"))

运行结果如下图所示:

5. 长字符串

使用3个单引号或双引号括起来的文本会成为多行注释,其实如果将这样的字符串使用print函数输出,或赋给一个变量,就会成为一个长字符串。在长字符串中会保留原始的格式。

print("""Hello             # 长字符串,会按原始格式输出          World""");

如果使用长字符串表示一个字符串,中间可以混合使用双引号和单引号,而不需要加转义符。

print("""Hell"o"           #  长字符串,中间混合使用双引号和单引号          W'o'rld"""

对于普通字符串来说,同样可以用多行来表示。只需要在每一行后面加转义符(\),这样以来,换行符本身就“转义”了,会被自动忽略,所以最后都会变成一行字符串。

print("Hello\n         # 输出一行字符串      World")

下面的例子完整地演示了长字符串的用法。

print('''I                     # 使用3个单引号定义长字符串
       'love'
          "Python"
          '''
    )
   
s = """Hello                   #  使用双引号定义长字符串
    World
       世界
    你好
"""
 
print(s)                       #  输出长字符串
 
print("Hello\                  #  每行字符串在回车符之前用转义符,就可以将字符串写成多行
   World")

程序运行结果如下图所示:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章