专栏首页极客起源Python编程思想(4):字符串类型

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

字符串的意思就是“一串字符”,也可以看做是字符的序列。比如“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. 字符串高级操作

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

(1)反转字符串

所谓反转字符串,就是将字符串按字符顺序倒序排列,例如,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")

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

本文分享自微信公众号 - 极客起源(geekculture),作者:geekori

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python多继承、super与MRO算法

    本文主要以Python3.x为例讲解Python多继承、super以及MRO算法。

    蒙娜丽宁
  • Python编程思想(26):成员变量

    李宁老师已经在「极客起源」 微信公众号推出《Python编程思想》电子书,囊括了Python的核心技术,以及Python的主要函数库的使用方法。读者可以在「极客...

    蒙娜丽宁
  • 算法君带你学算法(1):求最长回文字符串

    算法小白:最近一直在研究算法,刷了很多算法题,正好活动活动大脑,来来来,赶快出题!

    蒙娜丽宁
  • Python基础入门知识点——字符串的介绍

    字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。

    松鼠爱吃饼干
  • python 字符串

    在 python变量 文章中我们对python变量做了一个简单的了解,整数/浮点数/bool值相对来讲都比较简单,今天详细在讲解一下关于字符串的内容,字符串俗称...

    猿说编程[Python和C]
  • 通俗易懂PHP基础【6-字符串常用函数】

    最糟糕的是人们在生活中经常受到错误志向的阻碍而不自知,真到摆脱了那些阻碍时才能明白过来。

    Lemon黄
  • Python3基础数据-字符串

    字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。 创建字符串很简单,只要为变量分配一个值即可。例如:

    用户5522200
  • 能否详细讲讲字符串呢?

    字符串,的确是我们最常用的一个基本数据类型。字符串在编程中总是扮演重要的角色。它可以是一个变量的名称,也可以是一个变量的值。今天,我们就重点讨论当它作为一个值的...

    高一峰
  • Python基础之str常用方法、for循环

    还有一个方法index,它和find作用类似,通过元素找索引,不同点是:找不到指定的字符则会报错!

    爱学习的孙小白
  • 面试中常考的字符串操作方法大全,包含ES6

    对于JavaScript字符串操作方法,你真的全部掌握了吗?来看看这篇面试中常考的字符串操作大全,包含最新的ES6字符串操作方法,值得收藏哦。

    Javanx

扫码关注云+社区

领取腾讯云代金券