Python基础--字符串

上节中我们了解到了Python中的字符串的定义方式与JavaScript类似。通过由单引号'或双引号"括起。本节中我们进一步了解关于Python字符串的函数。
Python中代码是以换行为结束标志的。与Java等语言中使用的分号;不同。

一、多行字符串

Python中可以通过三对单引号'或者双引号"来实现多行字符串。在结果中,换行符插入与代码中相同的位置。

单行与多行字符串

同时在第一节中,我们讲到,多行字符串也可以用来做多行注释。同时它最多的用途就是用于多行注释时使用。

二、字符串即是数组

Python中没有字符数据类型,单个字符就是长度为 1 的字符串。Python中的字符串本质就是一个Unicode字符数组。所以Python中字符串中的某个字符,可以像数组一样通过下标索引来取得单个字符。同时Python支持负索引。与其他语言一样,Python的正向索引是从前到后,下标是从0开始的。而它的负向索引则是从后到前,下标从-1开始的。

str = "12345"
字符 1 2 3 4 5
正索引 0 1 2 3 4
负索引 -5 -4 -3 -2 -1
字符串索引

在输出的数据足够多的时候,我们可以使用代码替换符来格式化输出简化输出,这一点与大学学习的C语言很像。类似于Java中的System.out.println(),因为它默认带一个换行操作。

三、字符串截取

字符串截取从开始索引和结束索引,以冒号分隔,以返回字符串的一部分。遵循包左不右的原则。

>>> subStr = "Hello world"
>>> print(subStr[2: 5])
llo

这里可以同时使用正索引和负索引,但是需要注意结束索引不能在开始索引之前,否则永远都是空字符串。

>>> str = "hello wolrd!"
>>> str[2:1]
''
>>> str[2:-1]
'llo wolrd'
>>> str[2:-9]
'l'
>>> str[2:-10]
''

只缺省开始索引默认起始位置是0,缺省结束索引,默认截取从开始索引以后的所有字符。同时缺省开始索引和结束索引时,表示截取整个字符串。

>>> str = "hello wolrd!"
>>> str[:3]
'hel'
>>> str[2:]
'llo wolrd!'
>>> str[:]
'hello wolrd!'

四、字符串拼接

字符串的拼接通过+号拼接或者格式化的方式拼接。

1.通过+号拼接

>>> subStr = "Hello world"
>>> joinStr = "join"
# 字符串拼接
>>> print(subStr + " " + joinStr)
Hello world join

2.字符串格式化

①字符串格式化符号

Python中,字符串格式化的语法与Csprintf函数的语法相同。

# 这里只是借助print()函数输出内容而已。
>>> print("我是%s,正在%s的学习中,今天是第%d天" % ("yanxueer","python",1))
我是yanxueer,正在python的学习中,今天是第1天

>>> "我是%s,正在%s的学习中,今天是第%d天" % ("yanxueer","python",1)
'我是yanxueer,正在python的学习中,今天是第1天'
符号 描述
%c 格式化字符及其ASCII码
%s 格式化字符串
%d 格式化整数
%u 格式化无符号整型
%o 格式化无符号八进制数
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数(大写)
%f 格式化浮点数字,可指定小数点后的精度
%e 用科学计数法格式化浮点数
%E 作用同%e,用科学计数法格式化浮点数
%g %f%e的简写
%G %f%E 的简写
%p 用十六进制数格式化变量的地址

format()函数:接受一个格式字符串和任意一组位置和关键字参数。将{}替换为值。

# format()函数
>>> formatStr = "我是{},正在{}的学习中 "
>>> print(formatStr.format("yanxueer", "python"))
我是yanxueer,正在python的学习中
  • 也可以指定参数顺序,按位置访问参数:
>>> '{0}{1}{2}'.format('yan', 'xue','er')
'yanxueer'
>>> '{1}{2}-{0}'.format('yan', 'xue','er')
'xueer-yan'
>>> '{2}{0}{1}'.format('yan', 'xue','er')
'eryanxue'

>>> '{0}, {1}, {2}'.format(*'abc')
'a, b, c'

它到本质是替代,用0代替了传入到参数,但是实质仍然是参数本身,所以它也具有参数应该具有到特性以及拥有它们到函数。所以:

>>> '{0[0]}{1}{2}'.format('yan', 'xue','er')
'yxueer'
  • 按名称访问参数:
>>> "我是{ya}{xe}{er}".format(ya="yan",xe = "xue", er = "er")
'我是yanxueer'

对齐文本以及指定宽度:一个指定的宽度的字符串,默认填充的字符为空格。

>>> '{:<30}'.format('left aligned')
'left aligned                  '
>>> '{:>30}'.format('right aligned')
'                 right aligned'
>>> '{:^30}'.format('centered')
'           centered           '
>>> '{:*^30}'.format('centered') 
'***********centered***********'

③f-string:字面量格式化字符串

f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去。

>>> str ="world"
>>> f"hello {str}"
'hello world'
>>> f"{1+2}"
'3'

五、利用制表符或换行符来添加空白

# 制表符
>>> print("\t hello")
         hello
# 换行符
>>> print("hello\nworld")
hello
world
Python 转义字符
转义字符 描述
\(在行尾时) 续行符
\\ 反斜杠符号
\' 单引号
\" 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数,y 代表 0~7 的字符,例如:\012 代表换行。
\xyy 十六进制数,以 \x 开头,yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出

六、原始字符串和Unicode 字符串

1.原始字符串:在引号前添加 r 或 R 的字符串。

原始字符串会忽略所有的特殊的转义文字等

>>> print('\u6666')
晦
>>> print(r'\u6666')
\u6666
>>> print('yan \n xueer')
yan
 xueer
>>> print(r'yan \n xueer')
yan \n xueer

2.Unicode 字符串

在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。
Python3中,所有的字符串都是Unicode字符串。所以带不带u无所谓。

>>> '\u6666'
'晦'
>>> u'\u6666'
'晦'

七、删除空白

关于删除空白,Python提供了三种不同的删除场景。分别是删除末尾空白rstrip()删除开头空白lstrip()删除两端空白strip()

1.删除末尾空白

# 删除末尾空白
>>> stripStr = " python "
>>> print(stripStr.rstrip())
 python

2.删除开头空白

>>> stripStr = " python "
>>> print(stripStr.lstrip())
python 

3.删除两端空白

>>> stripStr = " python "
>>> print(stripStr.strip())
python

八、修改字符串的大小写

1.将字符串的第一个字符转换为大写

>>> "yan xueer".capitalize()
'Yan xueer'

2.单词首字母大写:只有不是连续字符,中间被任何字符分割,空格,逗号,引号等。

>>> str = "hello wolrd!"
>>> str.title()
'Hello Wolrd!'

3.全部大写

>>> str = "hello wolrd!"
>>> str.upper()
'HELLO WOLRD!'

4.全部小写

>>> str = "HELLO WOLRD!"
>>> str.lower()
'hello wolrd!'

九、查找字符串

1. find():语法find(str, beg=0, end=len(string))返回目标字符在字符串中的首次出现的索引位置。如果没有找到对应的索引位置,则返回-1。

>>> "yanxueer".find("e")
5
>>> "yanxueer".find("e",3,8)
5
>>> "yanxueer".find("e",3,5)
-1
>>> "yanxueer".find("z")
-1

2.index():语法index(str, beg=0, end=len(string))返回目标字符在字符串中的首次出现的索引位置。如果没有找到对应的索引位置,则报一个异常。

>>> "yanxueer".index("e")
5
>>> "yanxueer".index("e",3,8)
5
>>> "yanxueer".index("e",3,5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found
>>> "yanxueer".index("z")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

3. count():语法count(sub, start= 0,end=len(string)) 返回目标字符在字符串里出现的次数。

>>> "yanxueer".count("xue")
1
>>> "yanxueer".count("e")
2
>>> "yanxueer".count("z")
0

4. 通过字符串操作符 in: 存在返回True不存在返回False

>>> "xue" in "yanxueer"
True
>>> "xe" in "yanxueer"
False

十、字符串替换

replace():语法replace(old, new[, max]),不指定次数默认全部替换。

>>> "yanxueer".replace("e","a",1)
'yanxuaer'
>>> "yanxueer".replace("e","y")
'yanxuyyr'

十一、分割字符串

split():语法split(str="", num=string.count(str))。设置分割次数默认为 -1, 即分隔所有。默认分割为空格

>>> "yan xue er".split()
['yan', 'xue', 'er']
>>> "yan-xue-er".split("-")
['yan', 'xue', 'er']
>>> "yan xue er".split(" ",2)
['yan', 'xue', 'er']
>>> "hello yan xue er ".split(" ",2)
['hello', 'yan', 'xue er ']

十二、join()方法:用于将序列中的元素以指定的字符连接生成一个新的字符串。

>>> "-".join("yanxueer")
'y-a-n-x-u-e-e-r'
# 也可以是字符列表或元组
>>> "-".join(["23","32","32","32"])
'23-32-32-32'
>>> "-".join(("23","32","32","32"))
'23-32-32-32'

十三、字符编码

ord()函数获取字符的Unicode编码的整数值,chr()函数把Unicode编码的整数值转换为对应的字符。

# ord()函数
>>> ord('晦')
26214
# hex()将整数转换为以“0x”为前缀的小写十六进制字符串
>>> hex(ord('晦'))
'0x6666'

# chr()函数
>>> chr(0x6666)
'晦'
>>> chr(26214)
'晦'

关于常用的字符串操作就到这里,参照官方文档查看更多...

每日一言
任何时候醒悟都为时不晚,最好的时机是之前,其次是现在。

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

推荐阅读更多精彩内容

  • 一、Python3 字符串的编码 编码说明ASCII 编码只有大小写英文字母、数字和一些符号等127个字符(专用)...
    DDuncan阅读 266评论 0 0
  • python 字符串 字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。创建字符...
    _07阅读 684评论 0 1
  • 测试环境:Centos7+Python3.5 1.字符串拼接 正常情况用 “+” 号即可拼接字符串。但如果不用“+...
    言淦阅读 280评论 0 0
  • 这篇内容主要是作者对字符串进行理解总结 1. Python语言中的字符串有两大特点: 字符串是不可变的。 字符串是...
    0893051f5f11阅读 314评论 0 0
  • 1.字符串的介绍 字符串是程序中最常见的类型,很多地方都非常常见,例如:搜索引擎输入关键字就是字符串格式。 2.字...
    冰封心动阅读 454评论 0 0