【Python基础】3.字符串

本篇笔记知识点:
-修改字符串
字符串:修改大小写,拼接增加/删除空白
下标&切片
其他字符串常用操作

字符串

字符串:一系列字符,用来储存和表现基于文本信息
  在Python中用一对引号引起来的都是字符串,这个引号了一是双引号'' '',单引号' '或者三引号''' '''

修改字符串

修改字符串的大小写

  • Python对大小写很敏感,例如,在储存用户姓名的时候,如果用不同格式输入Lina,LINA,LiNa, 系统会认为这是三个变量,即储存三个不同的名字。
  • 在实际应用中,我们无法依靠用户来提供正确的大小写,因此我们需要将字符串先转换为我们需要的格式,再存储它们
  • 1.可以使用.title()来使字符串里的每个字节的首字母大写。
  • 2.可以使用.upper()来使字符串里的每个字母都大写。
  • 3.可以使.lower()使字符串里的每个字母都小写。
name = "Liu ka"
print(name)
print (name.title())
print (name.upper())
print (name.lower())

上述代码运行结果如下:

Liu ka
Liu Ka
LIU KA
liu ka

合并(拼接)字符串

  • 一些情况下,我们可能会把多个字符串拼接在一起使用。
    • 例如,姓和名存在不同的变量里,但是调用输出的时候,需要他们拼接在一起输出。
      通过拼接,可使用存储在变量中的信息来创建完整的消息。

1. 使用加号‘+’来合并字符串。

family_name = "李"
first_name="娜"
print(family_name,first_name)
print(family_name+first_name)

上述代码运行结果如下:

李 娜
李娜

2. 使用乘号‘*’来实现字符串的叠加效果。

str1 = "=+="
str2 = "bang"
print(str1*4)
print(str2*3)

上述代码运行结果如下:

=+==+==+==+=
bangbangbang

「注意」不同的数据类型是不可以拼接的,系统会报错。


在字符串中添加空白或换行

在编程中,空白泛指任何非打印字符,如空格、制表符和换行符。

  • 可使用空白来组织输出, 以使其更易读。
  • 要在字符串中添加制表符,可使用字符组合\t
  • 要在字符串中添加换行符,可使用字符组合\n
  • 可在同一个字符串中同时包含制表符和换行符。字符串"\n\t"让Python换到下一行,并在下一行开头添加一个制表符。
print("desk的意思是'桌子'")
print("desk的意思是\t'桌子'")
print("desk的意思是\n'桌子'")
print("desk的意思是\n\t'桌子'")

上述代码运行结果如下:

desk的意思是'桌子'
desk的意思是    '桌子'
desk的意思是
'桌子'
desk的意思是
    '桌子'

删除空白

 有的看似一样的字符串,因为空格,会被认定为不同的数据,有时候我们需要用到.lstrip()剔除字符串开头的空白,或使用.rstrip()来剔除字符串尾端的空白,也可以使用.strip()来剔除字符串两端的空白。
<p></p>
 「注意」这种删除只是暂时的,接下来再次询问这个字符串所在变量的值时,这个字符串与输入时一样,依然包含多余的空白。要永久删除这个字符串中的空白,必须将删除操作的结果存回到变量中

str = "  两端有空白需要删除  "
print(str)

str = "  两端有空白需要删除  "
str = str.lstrip()
print(str)

str = "  两端有空白需要删除  "
str = str.rstrip()
print(str)

str = "  两端有空白需要删除  "
str = str.strip()
print(str)

上述代码运行结果如下:

  两端有空白需要删除
两端有空白需要删除
  两端有空白需要删除
两端有空白需要删除

下标

字符串可以通过str[下标]来进行索引和切片。
(字符串、列表、元组都支持切片操作。)
所谓“下标”,就是编号,就好比超市中的存储柜的编号,通过这个编号就能找到相应的存储空间

  • 下标(索引): 就是对应的编号,默认python里面下标从0开始。

字符串中"下标"的使用:

如果有字符串:name = "My name is Mike",在内存中的实际存储如下:


字符串-下标.png

(截图from<编程小白的第一本Python入门书 >)


切片

  切片是指对操作的对象截取其中一部分的操作。可以看作是,在可操作对象中找出来我们想要的一小截,或者复制出来一小截我想要的长度储存在另外的地方,而不会对这个源文件改动。

切片的语法:[起始:结束:步长]

「提醒:」

  • 不指定步长时,默认步长为1
  • 结束位置不包含
  • 不指定起始位置时,默认起始位置是0
  • -1很特殊表示的最后一个元素

1.使用切片获取指定数据,步长默认是1。

my_str = "Pycharm"
print(my_str[0:3])  

运行结果:Pyc

2.快速取前三个字符 (开始位置不指定默认是0)

my_str = "Pycharm"
result = my_str[:3]
print(result)   

运行结果:Pyc

3.快速取最后三个字符

my\_str = "Pycharm"
result = my_str[-3:]
print(result)  

运行结果: arm

4.快速获取整个字符串

my\_str = "Pycharm"
result = my_str[:]  #my\_str[0:5] 

运行结果: Pycharm

5.负数下标
如果用正数下标完成不了的操作使用负数下标, -1很特殊表示的最后一个元素

my_str = "Pycharm"
result = my_str[-2:-5:-1] #负数下标
print(result)
result = my_str[3:0:-1] #正数下标
print(result)
result = my_str[-2:-6:-1]
print(result)

运行结果如下:

rah
hcy
rahc

6.获取整个字符串,然后倒着取每一个值

my_str = "Pycharm"
result = my_str[::-1]

运行结果如下:mrahcyp

7.根据切片取值,如果切片范围不对++不会崩溃++,得到空的字符串

my_str = "Pycharm"
result = my_str[3:1:1]
print("xxx:", result,":xxx")

运行结果为:xxx: :xxx

8.根据下标取值如果对应的元素不存在++会崩溃++.

my_str = "Pycharm"
result = my_str[7]
print(result)

运行后报错:

Traceback (most recent call last):
  File "/home/python/text.Python", line 2, in <module>
    result = my_str[7]
IndexError: string index out of range

不要忘记: 选取的区间从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身),步长表示选取间隔.


find

检测 str 是否包含在 mystr中,如果是返回开始的索引值,否则返回-1

mystr = 'hello world itcast and itcastcpp'
result1 = mystr.find("world")
print(result1)
result2 = mystr.find("loop")
print(result2)

上述代码运行结果如下:

6
-1

index

跟find()方法一样,只不过如果str不在 mystr中会报一个异常.
根据内容进行查找,返回一个下标,提示:如果没有找到则会崩溃

mystr = 'hello world itcast and itcastcpp'
result1 = mystr.index("world")
print(result1)
result2 = mystr.index("loop")
print(result2)

上述代码运行结果如下:

6
ValueError: substring not found

findindex还可以使用下标来命令程序在字符串的某一段里查找:

result = my_str.index("l", 0, 3)
print(result)

👆指定查找的字符串: "l"
开始位置: 0
结束位置(不包含): 3


count

统计字符出现的次数。
会返回 str在start和end之间 在 mystr里面出现的次数

str = "welcome to Python world!"
result = str.count("o")
print(result)  

运行结果:4


replace

把 mystr 中的 str1 替换成 str2,如果 count 指定,则替换不超过 count 次.
.replace()括号里的三个分别为:

  1. 原字符串
  2. 替换后的字符串
  3. 替换的次数,默认-1,或者不指定次数,表示全部替换
str = "welcome to Python world!"
result = str.count("o")
print(result)

name = "hello world, ha ha!"
result = str.replace('o','x',2)
print(result)

name = "hello world, ha ha!"
result = str.replace('o','x',1)
print(result)

name = "hello world, ha ha!"
result = str.replace('o','x',-1)
print(result)

name = "hello world, ha ha!"
result = str.replace('o','x')
print(result)

上述代码运行结果如下:

welcxme tx Python world!
welcxme to Python world!
welcxme tx Pythxn wxrld!
welcxme tx Pythxn wxrld!

split

  • 指定字符进行对某一串字符串进行分割
  • 分割次数: 指定1表示分割1次
  • 默认全部分割: -1
my_str = "哈哈:嘿嘿:嘻嘻"
result = my_str.split(":", 1)
print(result)

上述代码运行结果如下:

['哈哈', '嘿嘿:嘻嘻']

其他字符串常用操作:

capitalize - 把字符串的第一个字符大写

mystr = "city"
reault = mystr.capitalize()
print(reault)  #结果:City

startswith:判断是否是以指定字符串开始

my_url = "http://www.baidu.com"
result = my_url.startswith("http")
print(result)    #结果: True

endswith - 判断是否是以指定字符串结束

my_url = "http://www.baidu.com"
result = my_url.endswith(".cn")
print(result)     #结果:False

just

(1) ljust - 返回一个原字符串左对齐,并使用空格填充至长度 width的新字符串
(2) rjust - 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
(3) center - 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串

my_str = "hello"
result = my_str.ljust(10)
print(result)
result = my_str.rjust(10)
print(result)
result = my_str.center(10)
print(result)

上述代码运行结果如下:

hello     
     hello
  hello 

partition - 以指定字符串进行分段,一定会有三段数据,返回的是一个元组

my_str = "AABBCC"
result = my_str.partition("BB")
print(result)

上述代码运行结果如下:

('AA', 'BB', 'CC')

isalpha - 如果字符串里所有字符都是字母 则返回 True,否则返回 False

str = "138138138"
print(str.isalpha())

上述代码运行结果如下:False

isdigit - 如果字符串只包含数字则返回 True 否则返回 False.

str = "138138138"
print(str.isdigit())

上述代码运行结果如下:True

isalnum - 如果字符串里所有字符都是字母或数字则返回 True,否则返回 False

str = "138138138"
print(str.isalnum())

上述代码运行结果如下: True

isspace - 如果字符串中只包含空格,则返回 True,否则返回 False.

str = "138138138"
print(str.isspace())

上述代码运行结果如下:False

join - 在字符串中每个元素后面插入str,构造出一个新的字符串。

my_str = "ABC"
flag_str = "_"
result = flag_str.join(my_str)
print(result)

上述代码运行结果如下:A_B_C

rfind - 类似于 find()函数,不过是从右边开始查找

-1:表示没有找到的标记,下标都是正数

my_str = "abce"
result = my_str.rfind("d")
print(result)
result = my_str.rfind("c")
print(result)

上述代码运行结果如下:

-1
2


Python字符串运算符

下表实例变量a值为字符串 "Hello",b变量值为 "Python":

操作符 描述 实例
+ 字符串连接 a + b 输出结果: HelloPython
* 重复输出字符串 a*2 输出结果:HelloHello
[] 通过索引获取字符串中字符 a[1] 输出结果 e
[ : ] 截取字符串中的一部分,遵循左闭右开原则,str[0,2] 是不包含第 3 个字符的。 a[1:4] 输出结果 ell
in 成员运算符 - 如果字符串中包含给定的字符返回 True 'H' in a 输出结果 True
not in 成员运算符 - 如果字符串中不包含给定的字符返回 True 'M' not in a 输出结果 True
r/R 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 print( r'\n' )


python字符串格式化符号:

符 号 描述
%c 格式化字符及其ASCII码
%s 格式化字符串
%d 格式化整数
%u 格式化无符号整型
%o 格式化无符号八进制数
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数(大写)
%f 格式化浮点数字,可指定小数点后的精度
%e 用科学计数法格式化浮点数
%E 作用同%e,用科学计数法格式化浮点数
%g %f和%e的简写
%G %f 和 %E 的简写
%p 用十六进制数格式化变量的地址


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

推荐阅读更多精彩内容