2024年2024年最新Python大数据之Python基础【四】字符串(1),大数据开发高级面试题库

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

在一对引号内部进行手动换行,无法修改其字符串的格式,必须使用转义字符\n \t等

str1 = 'hello ’
‘world’
print(str1)

在三对引号内进行手动换行,可以在打印时输出换行格式,无需使用转义字符

str3 = ‘’‘hello
bigdata’‘’
print(str3)

str4 = “”"
弃我去者昨日之日不可留
乱我心者今日之日多烦忧
长风万里送秋雁
对此可以酣高楼

“”"

三对引号可以作为多行注释

需求 : 输出 I’m Jake.

如果字符串被双引号包裹,则内部可以单独使用单引号

print(“I’m jake”)

需求:输出"鲁迅说:I’m a 周树人"

print(‘’‘“孔子说:I’m a 文豪”’‘’)



输入 input

user_name = input(‘请输入你的用户名’)

输出

print(f’您的用户名是{user_name}')
print(‘您输入的用户名是%s’ % user_name)


### 3、字符串索引


* 索引就是系统给字符串中每一个元素的编号
	+ 正数索引:从0开始,从左至右依次递增
	+ 负数索引:从-1来时,从右至左依次递减
* 使用索引可以获取字符串中的元素
	+ 字符串[元素的索引]



什么是字符串索引?

就是保存字符串时,将所有字符依次存入字符串所在空间,并且按照顺序将元素依次存放, 为了方便存取数据,我们讲元素进行编号,从0开始依次递增

通过下标索引,可以获取元素,或者进行切片等操作

str1 = ‘itheima’

通过索引获取元素的格式: 字符串[元素索引]

需求:想获取第5个元素

print(str1[4])

需求:获取t

print(str1[1])

‘’’
i t h e i m a

正数索引

0 1 2 3 4 5 6

负数索引

-7 -6 -5 -4 -3 -2 -1
‘’’

结论:字符串中的索引,正数索引从0开始,从左至右依次递增, 负数索引,从-1开始从右至左依次递减

需求:使用负数索引取 m

print(str1[-2])
print(str1[-4])


### 4、字符串切片


* 字符串切片就是讲字符串中的一部分数据按照指定规则进行分隔得到的新的字符串
* 字符串切片的格式



字符串[起始位置索引:终止位置索引:步长]


* 起始位置可以省略:
	+ 步长为正:起始位置默认为字符串开始
	+ 步长为负:起始位置默认为字符串结束
* 终止位置可以省略:
	+ 步长为正:终止位置默认为字符串结束
	+ 步长为负:终止位置默认为字符串开始
* 步长可以省略,省略后默认为1,并且可以省略冒号
* 复制字符串:str[:]
* 反转字符串:str[::-1]
* 注意:如果步长为正,则起始位置在终止位置左侧,如果步长为负,则起始位置在终止位置右侧



切片:就是按照一定的索引位置和步长将字符串分割出一部分就是切片

切片的格式:数据序列[起始位置索引:结束位置索引:步长] 字符串,列表,元组,都可以进行切片

str1 = ‘itheima’

需求:将the切片出来

字符串切片以及其他容器类型的切片操作,都会重新生成一个新的数据序列,不会对原有数据序列产生影响

str2 = str1[1:4:1]
print(str2)

切片逻辑

起始位置: 字符串切片的起点(包含)

结束位置:字符串切片的终点(不包含)

在开发中绝大多数范围区间是左闭右开区间,其余内容单独记忆(例如 randint是一个闭区间)

步长:步长就是每一次查找数据的间隔(相邻两个索引的差值就是步长)

str2 = ‘我爱北京天安门,天安门上太阳升!’

获取"北京天安门"

print(str2[2:7:1])

如果步长为1 可以被省略

步长省略后,:也可以省略

print(str2[2:7])

起始位置也可以省略

如果起始位置省略,步长为正数,则起始位置为字符串开始

print(str2[:7:1]) # 我爱北京天安门

如果起始位置省略,步长为负数,则起始位置为字符串末尾

print(str2[:7:-1]) # !升阳太上门安天

为什么为空? 字符串切片起点 是索引为2 的位置, 步长是-1 切片区间[2,7),此时从2的位置从右向左步长为1 切片此区域没有数据.

print(str2[2:7:-1]) # 空字符串

结论: 如果步长是负数,开始位置要在结束位置右侧,否则没有数据

结束位置可以省略

如果结束位置省略,步长为正数,则结束位置为字符串末尾

print(str2[8::1]) # 天安门上太阳升!

下方表达式和上一行是否含义相同? 不相同,因为结束位置写-1不包含结束位置

print(str2[8👎1]) # 天安门上太阳升

如果结束位置省略,步长为负数,则结束位置为字符串开始

print(str2[8::-1]) # 天,门安天京北爱我

如果结束位置写0 含义也不相同

print(str2[8:0:-1]) # 天,门安天京北爱我

需求:在字符串中截取"天门天门"

print(str2[4: 11: 2]) # 天门天门

在使用字符串切片进行非1步长书写时,要注意起始位置和结束位置,并且查看间隔

Python中优雅的字符串反转方式

print(str2[::-1]) # !升阳太上门安天,门安天京北爱我

python中复制数据序列的方法

str3 = str2[:]
print(str3) # 我爱北京天安门,天安门上太阳升!


### 5、字符串查询


* index:查找字符串中子字符串所在位置i,如果有该字符串,查询其从左至右第一次出现的位置的正数索引,否则报错。
* find:查找字符串中子字符串所在位置i,如果有该字符串,查询其从左至右第一次出现的位置的正数索引,否则返回-1。
* rindex:查找字符串中子字符串所在位置i,如果有该字符串,查询其从右至左第一次出现的位置的正数索引,否则报错。
* rfind:查找字符串中子字符串所在位置i,如果有该字符串,查询其从右至左第一次出现的位置的正数索引,否则返回-1。
* count:查询子字符串在指定字符串中出现的次数。



str1 = ‘hello python’

index

需求:查找p所在的索引位置

格式: 字符串.index(self(不用传值), sub(子字符串), start(起始位置), end(结束位置))

print(str1.index(‘p’)) # 6

如果字符串中含有多个子字符串,则会返回指定范围内的从左至右的第一个查找到的子字符串位置索引

print(str1.index(‘o’)) # 4

查询指定范围内的字符串,虽然指定了范围,但是计算索引是从左至右依次递增的

print(str1.index(‘o’, 5, 12)) # 10

ValueError: substring not found

结论:找不到对应的子字符串,则会报错,如果能够查找到数据返回当前子字符串的正数索引

指定查找范围是左闭右开区间

print(str1.index(‘o’, 5, 10)) # 10

print(str1.index(‘o’, 10, 12)) # 10

find

str1 = ‘hello python’

需求:查找p所在的索引位置

格式: 字符串.find(self(不用传值), sub(子字符串), start(起始位置), end(结束位置))

print(str1.find(‘p’)) # 6

如果字符串中含有多个子字符串,则会返回指定范围内的从左至右的第一个查找到的子字符串位置索引

print(str1.find(‘o’)) # 4

指定范围查找

需求:查找o 指定范围为 5,10 10,12

结论:使用find进行查询时,如果查询的子字符串不存在,则返回-1,如果存在则返回指定正数索引

find的查询范围是左闭右开区间

print(str1.find(‘o’, 5, 10))
print(str1.find(‘o’, 10, 12))

查询的子字符串可以是单个字符可以是多个字符

print(str1.find(‘python’)) # 6

rfind

和find使用方式完全相同,只是在查询时,从右至左查询,返回第一次查询到的字符索引,返回的依然是正数索引

print(str1.rfind(‘o’)) # 10

rindex

和index使用方式完全相同,只是在查询时,从右至左查询,返回第一次查询到的字符索引,返回的依然是正数索引

print(str1.rindex(‘o’))

结论:index 和 find 使用方法完全一致,只是,index 在查询不到子字符串时会报错,find会返回-1

count() 计数

使用count 可以返回当前子字符串在指定字符串中出现的次数

需求:查询o在str1 中出现的多少次

提示:在大多数编程语言中, 计数从1开始数, 索引或编号,从0开始编号

格式: 字符串.count(self(不用传值, x(要查询个数的子字符串), start(开始位置), end(结束位置)))

print(str1.count(‘o’))

需求,查询指定范围内h的个数 从1-9 9-12

结论:1.count查询的范围是一个左闭右开区间

2.如果没有查询到子字符串则返回0 不会报错

print(str1.count(‘h’, 1, 9)) # 0
print(str1.count(‘h’, 9, 12)) # 1


### 6、字符串替换


* replace:将旧值替换指定字符串中的新值



replace

str1 = ‘hello python’

需求: 将o 替换为 $

格式: replace(self(不用传值), old(旧值), new(新值), count(替换次数))

print(str1.replace(‘o’, 'KaTeX parse error: Expected 'EOF', got '#' at position 6: ')) #̲ hell pyth$n

指定替换次数

如果不指定替换次数,默认将所有的制定字符全部替换

print(str1.replace(‘o’, 'KaTeX parse error: Expected 'EOF', got '#' at position 9: ', 1)) #̲ hell python

如果指定的替换次数大于出现的次数,则也是只替换出现的次数

print(str1.replace(‘o’, 'KaTeX parse error: Expected 'EOF', got '#' at position 10: ', 10)) #̲ hell python


### 7、字符串的拆分和合并


* split:字符串按照指定分隔符进行拆分
	+ 拆分后得到的结果是有拆分后的字符串组成的一个列表
	+ 拆分后,所有的分隔符消失
* join:将字符串序列(容器类型中所有元素均为字符串)按照指定分隔符进行合并



split 字符串拆分

str1 = ‘I love Python and java and c and lixiaolong’

需求: 将所有的单词按照空格为分隔符进行拆分,拆分为多个字符串

split 会按照指定分隔符进行拆分,拆分完成后 会将所有的拆分后的结果以字符串形式保存到列表中

split(self(不用传值), sep(分隔符), maxsplit(最大分割次数))

print(str1.split()) # [‘I’, ‘love’, ‘Python’, ‘and’, ‘java’, ‘and’, ‘c’, ‘and’, ‘lixiaolong’]

指定最大分割次数

可以把split看成一把刀,字符串看成一条线,砍一刀分成两份,砍两刀分成3分以此类推

print(str1.split(’ ', 3)) # [‘I’, ‘love’, ‘Python’, ‘and java and c and lixiaolong’]

需求:按照以’a’为分割符进行拆分,将str1 最大拆分次数60次

使用谁作为分隔符,则拆分后该分隔符消失,

最大拆分次数如果超过可以拆分的上限,则保持拆分上线即可,不会报错

print(str1.split(‘a’, 60)) # ['I love Python ', ‘nd j’, ‘v’, ’ ', 'nd c ', ‘nd lixi’, ‘olong’]

join 字符串合并

list1 = str1.split()
list2 = [1,2,3,4,‘abc’]
print(list1)

将list1 按照指定分隔符❤ 合并为一个字符串

格式:分隔符.join(iterable(可迭代类型))

print(‘❤’.join(list1)) # I❤love❤Python❤and❤java❤and❤c❤and❤lixiaolong

进行join合并时,要注意可迭代类型中全部元素都要是字符串类型,否则无法合并

print(‘❤’.join(list2)) # TypeError: sequence item 0: expected str instance, int found


### 8、字符串转换


* capitalize:将字符串首字母大写,其余字母小写
* title: 将字符串中每个单词首字母大写(任何非字母字符都可以作为单词分隔符)
* upper:将字符全部变为大写
* lower:将字符全部变为小写



字符串中各种大小写转换

str1 = ‘hello woRld aNd Python’

capitalize 将字符串的第一个字母大写,同时讲其余全部字母小写, 对数字和汉字等不做处理

print(str1.capitalize()) # Hello world and python

title 将所有的单词首字母大写,其余字母变为小写

在Python中怎样对单词进行辨别, 非字母字符都可以作为分隔符

str2 = ‘hello中国python’
print(str1.title()) # Hello World And Python
print(str2.title()) # Hello中国Python

upper()将数据全部变为大写

print(str1.upper()) # HELLO WORLD AND PYTHON

lower()将字符全部变为小写

print(str1.lower()) # hello world and python


### 9、字符串两侧指定字符删除


* strip:删除字符串两侧的指定字符
* rstrip:删除字符串右侧的制定字符
* lstrip:删除字符串左侧的指定字符



strip 去重字符串左右两侧指定字符

str1 = ’ hello python\t \n ’

strip中如果不传参数,则去除字符串左右两侧的空白(包括空格,换行,制表位等)

print(str1.strip()) # hello python

格式:字符串.strip(self(不传值), chars(可以传一个字符或多个字符))

str2 = ‘$ h e l l o P y t h o n hello Python helloPython$’

删除字符串左右两侧的$符号

删除一个指定字符

print(str2.strip(‘$’)) # hello Python

删除多个指定字符

str3 = ‘13214123123hello Python12314123123123’
print(str3.strip(‘12’)) # 314123123hello Python12314123123123
print(str3.strip(‘123’)) # 4123123hello Python12314
print(str3.strip(‘4231’)) # hello Python

结论:如果在strip中填写多个字符,等号左右两侧出现的字符如果在传入的字符串中,则删除,否则保留

传入多个字符时,和传入的顺序没有任何关系,只要是传入的字符就不能出现在指定字符串左右两侧,直到出现不属于其内容的字符删除结束

rstrip 删除字符串右侧指定的字符

print(str3.rstrip(‘1234’))

lstrip 删除字符串左侧指定的字符

print(str3.lstrip(‘1234’))

TypeError: lstrip arg must be None or str

strip, lstrip, rstrip 只能接收str类型参数或者None

print(str3.lstrip(1234))


### 10、字符串对齐


![img](https://img-blog.csdnimg.cn/img_convert/885357611febd763cdf1c33d8fe45e9a.png)
![img](https://img-blog.csdnimg.cn/img_convert/b8e661c22bd3d72241c311be950b18d9.png)
![img](https://img-blog.csdnimg.cn/img_convert/933840d2cbb5312ad3bfef6fc1b814cb.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

rip(1234))

10、字符串对齐

[外链图片转存中…(img-2qutycrX-1715571421535)]
[外链图片转存中…(img-2AipbrCd-1715571421535)]
[外链图片转存中…(img-ytAdjjO1-1715571421535)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值