Python基础篇-----字符串

本文介绍了Python中字符串的基本操作,包括使用单引号和双引号创建字符串,以及三引号创建多行字符串。详细讲解了格式化输出的多种方式,如%操作符、format()函数和f-string。还涉及了输入函数input(),字符串的索引、切片,以及查找、修改、大小写转换、判断和运算等方法。此外,提到了字符串是不可变数据类型,强调了类型转换的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在Python语言中,字符串是一个有序字符的集合。一个字符串被创建之后,其中的字符的相对位置就固定了。字符串和元组一样都属于不可变的数据类型。

1 字符串的创建

        我们可以使用引号('或者")来创建字符串。创建字符串的方式很简单,只用给变量分配一个值即可。

# 单引号
str1 = 'hello world!'
# 双引号
str2 = "I love you!"

        当我们分配变量的值比较多时,我们可以采用三引号('''或""")。

str1 = '''
		离离原上草,一岁一枯荣
		野火烧不尽,春风吹又生
	   '''

2.字符串的输入和输出

2.1 格式化输出

占位符含义
%d转为整数类型
%f转为浮点型
%s转为字符串型
%x转为十六进制整数

一般的我们可以对占位符进行一定的修饰,常用的占位符的修饰。

(1)-号表示左对齐。

(2).号表示小数点后的位数。

(3)0表示补前导0。

print("%02d" %3)		# 03
print('%.2f' % 3.1415)	# 3.14

        需要注意的是当我们想要表示%号的时候,我们可以采用%%来表示,不然很容易会出现与预期不一样的结果。

2.2 format()格式化输出

# 输出语句{[占位符]}".format("传入的参数")
age = 18
print("{}".format(age))
name = '张三'
print("我的名字是{},我今年{}岁了".format(name, age))
print("我的名字是{1},我今年{0}".format(name, age))

         我们不难发现format传入参数时会带有一定的次序,默认是从左到右一个一个填入,但如果我们自身规定顺序的话,那结果就会截然不同。

2.3 使用转义字符f也可以进行格式化输出

age = 18
name = "张三"
print(f'我今年{age}岁了,我的姓名是{name}')

         我们可以在输出字符串前加上f,这样Python解释器就能明白我们正在进行格式化输出。

2.4 输入input():

# 使用格式 变量名 = input()
name = input("请输入您的名字:")
print(name)
print(type(name))

         我们可以观察到input函数传入的是一个字符串,所以我们在对具体问题分析时需要考虑到这一点,比如我们想要输入年龄,我们都知道年龄是一个整数类型,因此我们需要在赋值的过程中进行类型转化。

age = int(input("请输入您的年龄"))
print(type(age))

 

3. 索引:   

      索引又成为下标,相当于字符串内的元素在字符串中的编号。比如我们取快递的时候就有一个取件码,然后我们可以通过取件码快速找到我们的快递。

        索引是从0开始的,因此索引的结束应该为字符串元素个数-1。索引又分为正向索引和反向索引。

abcde
正向索引01234
反向索引-5-4-3-2-1

4. 切片:

​            切片是指对操作的对象截取其中一部分的操作。字符串,列表,元组都支持切片操作。**

​    切片我们通常是利用索引来完成的,其格式如下:

# 变量名[开始:结束:步长] 从当前索引开始,一直到索引结束,但是不包含最后的索引值,步长就是隔多少个数取值
name = "hellopython"

print(name[2:5])			 # 从索引2开始,到5结束(但是不打印索引5的值)  打印llo

print(name[: 5])			 # 从索引0开始,到5结束(但是不打印索引5的值)  打印hello

print(name[1:])     		 # 从1开始,一直到结束,打印ellopython

print(name[:])			     # 打印全部元素

print(name[2:7:2])			 # 从索引2开始,到7结束(但是不打印索引7的值),步长为2,打印loy 

5. 字符串的基本操作:

5.1 查找:

· in 和 not in : 用于判断某个字符串是否为待判断字符串的子串,返回的是bool型(True,False)

print('i' in 'iphone')			# True
print('p' not in 'apple')		# Flase

· find():检测某个字符串是否包含在这个字符串当中,如果存在则返回这个字符串第一个匹配值最开始的位置下标,否则则返回-1。什么意思勒?举个例子吧:

var1 = 'abcde'					
print(var1.find('c'))		  # 2 从左到右匹配到c停止返回c的下标
var2 = '红鲤鱼与绿鲤鱼与驴'
print(var2.find('鲤鱼'))		 # 1 从左往右匹配,匹配到第一个鲤鱼停止匹配并返回鲤的下标,因为鲤的下标								# 是第一个匹配最开始的位置下标
var3 = 'abcde'
print(var3.find('f'))		  # 这个字符串不存在当前字符串中返回-1 

· index():检测某个⼦串是否包含在这个字符串中,如果在返回这个⼦串开始的位置下标,否则则报异常。

注意:开始和结束位置下标可以省略,表示在整个字符串序列中查找。

# 字符串序列.index(⼦串, 开始位置下标, 结束位置下标)
var = "hello python and hello world!!!"
print(var.index('and'))			# 返回从左到右第一个匹配and的下标  13
print(var.index('java'))		# 字符串中没有java发生报错
print(var.index('hello',10,25)) # 从索引10开始查找直到查找索引为25(但不包含25这一索引,返回第一个匹配的字符串)  17

· count():返回某个子串在字符串中的出现次数

注意:开始和结束位置下标可以省略,表示在整个字符串序列中查找。

# 字符串序列.count(子串,开始,结束)
var = "红鲤鱼与绿鲤鱼与驴"
print(var.count("鲤鱼"))		# 若未设置开始以及结束位置,则默认从左到右全部查找  2
print(var.count("鲤鱼",3,8))	# 从索引3开始查找,到索引为8结束(不包括8这一索引)  1

拓展:

var = "红鲤鱼与绿鲤鱼与驴"
# rfind():与find()功能相同。但查找的方向从右侧开始
print(var.rfind("鲤鱼"))		# 5
# rindex():与index()功能相同,但查找方向为右侧开始
print(var.rindex("鲤鱼"))		# 5

5.2 修改

· replace():替换内容

注意:替换次数如果超出⼦串出现次数,则替换次数为该⼦串出现次数。

# 字符串序列.replace(旧⼦串, 新⼦串, 替换次数) 
var = '红鲤鱼与绿鲤鱼与驴'
print(var.replace("鲤鱼","金鱼"))
print(var.replace("鲤鱼","金鱼",1))

注意:数据按照是否能直接修改分为可变类型和不可变类型两种。字符串类型的数据修改的时候不能改变原有字符串,属于不能直接修改数据的类型即是不可变类型。

· split():按照指定的字符进行分割,返回的是一个列表。

注意:num表示的是分割字符出现的次数。

# 字符串序列.split(分割字符, num)
var = '红鲤鱼与绿鲤鱼与驴'
print(var.split('鲤鱼'))
print(var.split('鲤鱼', 1))

 
· join():用一个字符或子串合并字符串,也就是将多个串合并。

# 字符或⼦串.join(多字符串组成的序列)
li1 = ["hello", "python", "i", "love", "you"]		# 将列表转化为字符串,并用,分隔
t1 = ("hello", "python", "i", "love", "you")		# 将元组转化为字符串,并用,分隔
se1 = {"hello", "python", "i", "love", "you"}		# 将集合转化为字符串,并用,分隔
print(','.join(li1))
print(','.join(t1))
print(','.join(se1))

 

5.3 大小写转化

· capitalize():将字符串第一个字符转化为大写

var = "hello python and hello world"
print(var.capitalize())

· title(): 将字符串每个单词首字母转化为大写

var = "hello python and hello world"
print(var.title())

· upper(): 将字符串中的小写转为大写

var = "hello python and hello world"
print(var.upper())

· lower(): 将字符串中的小写转为大写

var = "HELLO PYTHON AND HELLO WORLD"
print(var.lower())

· lstrip(): 删除字符串左侧空白字符,无参数默认为空格。

var = "    hello python and hello world      "
print(var.lstrip())				# 删除左侧空格

· rstrip(): 删除字符串右侧的空白字符,无参数传递默认为空格。

var = "    hello and python and hello world      "
print(var.rstrip())				# 删除右侧空格

· strip(): 删除字符串两侧的空白字符,无参数传递默认为空格。

var = "    hello python and hello world      "
print(var.lstrip())				# 删除两侧空格

· ljust():返回⼀个原字符串左对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串 。

· rjust():返回⼀个原字符串右对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串。

· center():返回⼀个原字符串居中,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串。

# 字符串序列.ljust(⻓度, 填充字符)
var = "hello"
print(var.ljust(10,"_"))	# 左对齐
print(var.rjust(10,"_"))	# 右对齐
print(var.center(10,"_"))	# 居中对齐

 

5.4 判断

· startswith(): 检查字符串是否以传入子串作为开头(返回的是一个bool型)

# 字符串序列.startswith(⼦串, 开始位置下标, 结束位置下标) 
var = "hello and python and hello world"

print(var.startswith("hello"))			# 开头是hello,返回True
print(var.startswith("and"))			# 开头不是and,返回False
print(var.startswith("and",6,20))		# 在索引6-20,开头是and,返回True

· endswith(): 检查字符串是否以传入子串作为结尾(返回的是一个bool型)

# 字符串序列.endswith(⼦串, 开始位置下标, 结束位置下标)
var = "hello and python and hello world"

print(var.endswith("and"))				# 结尾不是and,返回False
print(var.endswith("world"))			# 结尾时world,返回True
print(var.endswith("and",0,9))			# 在0到9的索引范围,是and结尾,返回True

· isalpha():如果字符串所有字符都是字⺟则返回 True, 否则返回 False。

mystr1 = 'hello'
mystr2 = 'hello12345'

print(mystr1.isalpha())		# 结果:True
print(mystr2.isalpha())		# 结果:False

· isdigit():如果字符串只包含数字则返回 True 否则返回 False。

mystr1 = 'aaa12345'
mystr2 = '12345'

print(mystr1.isdigit())		# 结果: False
print(mystr2.isdigit())		# 结果:True

· isalnum(): 如果字符串所有字符都是字⺟和数字则返 回 True,否则返回False。

mystr1 = 'aaa12345'
mystr2 = '12345-'

print(mystr1.isalnum())		# 结果:True
print(mystr2.isalnum())		# 结果:False

· isspace():如果字符串中只包含空⽩,则返回 True,否则返回 False。

mystr1 = '1 2 3 4 5'
mystr2 = ' '

print(mystr1.isspace())		# 结果:False
print(mystr2.isspace())		# 结果:True

6. 字符串的运算

a = 'Hello' b = 'World'

+字符串连接操作print(a+b)HelloWorld
*字符串倍增操作print(a*3)HelloHelloHello
[]字符串索引获取字符串元素操作print(a[1])e
[ : ]字符串切片操作print(a[1:5])ello
in成员运算符-如果字符串包含给定字符则返回True,否则返回Falseprint('e' in a)True
not in成员运算符-如果字符串不包含给定运算符则返回True,否则返回Flaseprint('c' not in a)True
r取消转义(如\n,\t等)print(r"\n\n\n")\n\n\n
%格式化字符串

        以上是我对字符串基础学习的总结,字符串的一些操作和方法确实是要比其他序列类型要多哈哈,如果大家发现本文中出现的问题,希望大家能够指明,我们共同学习探讨!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值