第十三讲 字符串索引-字符串索引-分割-切片

本文详细讲解了Python字符串的索引、切片、分割和连接操作。通过索引可提取单个字符或子串,切片则允许更灵活地获取子串。split()方法用于按指定分隔符分割字符串,而join()用于连接字符串列表。此外,还介绍了Python字符串的驻留机制以及==和is操作符在比较字符串时的区别。

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

目录

1.字符串索引

1.1 提取单个字符

1.2 提取子串

1.3  倒序提取字符

1.4 步长提取字符 

2. 字符串的切片

 3. 字符串的分割

4. 字符串连接join()

5. 字符串驻留机制

6. 字符串比较和同一性

6.1  == 操作符

6.2 is 操作符


1.字符串索引

使用方括号 [] 来提取字符串中的单个字符或子串。这种方法也称为索引(Indexing)。Python中的字符串是一个字符序列,每个字符都有一个唯一的索引位置,从0开始递增。通过指定索引位置,我们可以提取对应位置的字符。

char = string[index]
  • string 是要提取字符的字符串。
  • index 是字符在字符串中的位置索引,从0开始计数。
  • 正向搜索:最左侧第一个字符,偏移量是0,第二个偏移量是1,以此类推。直到len(str)-1为止。
  • 反向搜索:最右侧第一个字符,偏移量是-1,倒数第二个偏移量是-2,以此类推,直到-len(str)为止。

1.1 提取单个字符

提取了字符串 "Hello" 中索引为1的字符,即字符 'e'。

text = "Hello"
char = text[1]
print(char)  # 输出: 'e'

1.2 提取子串

提取了字符串 "Python" 中索引从2到5(不包括5)的子串,即子串 'tho'。

text = "Python"
substring = text[2:5]
print(substring)  # 输出: 'tho'

1.3  倒序提取字符

使用负数索引 -1 来提取字符串 "Python" 中倒数第一个字符,即字符 'n'。

text = "Python"
char = text[-1]
print(char)  # 输出: 'n'

1.4 步长提取字符 

使用步长为2来提取字符串 "Python" 中的字符,结果为 'Pto'。

text = "Python"
chars = text[::2]
print(chars)  # 输出: 'Pto'

2. 字符串的切片

字符串切片(slice)操作是一种用于提取子串的灵活方法。通过指定起始索引、结束索引和步长,我们可以从原始字符串中获取所需的子串。

substring = string[start:end:step]
[起始偏移量start:终止偏移量end:步长 step]
start、end、step 为正数的情况:

操作和说

[:] 提取整个字符

“abcdef”[:]

“abcdef”

[start:] start索引开始到结

“abcdef”[2:]

“cdef”

[:end] 从头开始知道end-1

“abcdef”[:2]

“ab”

[start:end] startend-1

“abcdef”[2:4]

“cd”

[start:end:step]  start提取到end-1,步长是step

“abcdef”[1:5:2]

“bd”

 start、end、step 为负数的情况:

"abcdefghijklmnopqrstuvwxyz" [-3:]

倒数三

“xyz”

"abcdefghijklmnopqrstuvwxyz" [-8:-3]

倒数第八个到倒数第三个(包头不包尾)

'stuvw'

"abcdefghijklmnopqrstuvwxyz" [::-1]

步长为负,从右到左反向提取

'zyxwvutsrqponmlkjihgfedcba'

注意: 切片操作时,起始偏移量和终止偏移量不在 [0, 字符串长度 -1] 这个范围,也不会报错。起始偏移量小于 0 则会当做 0 ,终止偏移量大于 长度 -1” 会被当成-1
a = "python"
print(a[2:100])

# 运行结果:thon

 3. 字符串的分割

  • split 方法来将字符串分割成子串,并返回一个包含分割结果的列表。
  • split()可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔符,则默认使用空白字符(换行符/空格/制表)
result = string.split(sep, maxsplit)
  • string 是要进行分割操作的原始字符串。
  • sep 是可选参数,表示分隔符(默认为所有的空白字符,如空格、制表符、换行符等)。
  • maxsplit 是可选参数,表示最大分割次数。
text = "Hello, World!"
words = text.split()
print(words)  # 输出: ['Hello,', 'World!']


text = "apple,banana,orange"
fruits = text.split(',')
print(fruits)  # 输出: ['apple', 'banana', 'orange']



text = "one,two,three,four,five"
parts = text.split(',', 2)
print(parts)  # 输出: ['one', 'two', 'three,four,five']

4. 字符串连接join()

string.join(iterable)
  • 是用来连接序列中各个元素的字符串。
  • iterable是一个可迭代对象,例如列表、元组或者字符串等。

join()方法会将iterable中的每个元素转换为字符串,然后使用string将它们连接起来,并返回最终的字符串结果。

my_list = ['Hello', 'world', '!']
result = ' '.join(my_list)
print(result)

# 结果文件:Hello world !

拼接字符串要点:

使用字符串拼接符 + ,会生成新的字符串对象,因此不推荐使 用 + 来拼接字符串。推荐使用 join 函数,因为 join 函数在拼接字 符串之前会计算所有字符串的长度,然后逐一拷贝,仅新建一 次对象。

5. 字符串驻留机制

        字符串驻留机制是指对于较短的字符串,解释器会尝试将其存储在内存中的相同位置,以节省内存空间。这意味着当使用相同的字符串值创建多个对象时,解释器会尽量让这些对象共享相同的内存空间,从而减少内存占用。这个优化策略适用于一定范围内的字符串,通常是长度不超过20个字符的字符串。

# 创建两个相同值的字符串
str1 = 'hello'
str2 = 'hello'

# 检查两个字符串对象是否相同
print(str1 is str2)  # True

# 使用字符串的切片操作创建一个新的字符串,即使值相同,也会创建新的对象
str3 = str1[:]

# 检查新的字符串对象与之前的字符串对象是否相同
print(str1 is str3)  # False

6. 字符串比较和同一性

  • 直接使用 == 或 != 对字符串进行比较,判断字符串是否相同
  • 使用is 或 not is 判断两个对象是否同一个对象,比较的是对象的地址, 即id(obj1)是否id(obj2)相等

6.1  == 操作符

  • == 用于比较两个对象的值是否相等。
  • 当使用==比较两个对象时,Python会比较它们的值,如果它们的值相等,则返回True,否则返回False
  • 对于不同类型的对象,==操作符会根据对象的类型来确定是否相等,例如对于数字、字符串、列表等基本类型,会比较它们的值是否相等;对于自定义对象,则需要实现__eq__()方法来定义相等性。
x = 5
y = 5
print(x == y)  # 输出 True,因为 x 和 y 的值都是 5

list1 = [1, 2, 3]
list2 = [1, 2, 3]
print(list1 == list2)  # 输出 True,因为 list1 和 list2 的值相同

6.2 is 操作符

  • is 用于比较两个对象是否是同一个对象(即它们是否引用同一个内存地址)。
  • 当使用is比较两个对象时,Python会检查它们是否指向内存中的同一位置,如果是,则返回True,否则返回False
  • is 操作符比较的是对象的身份标识,即它们在内存中的地址是否相同,而不是它们的值是否相等。
a = [1, 2, 3]
b = [1, 2, 3]
c = a

print(a is b)  # 输出 False,因为 a 和 b 是不同的对象
print(a is c)  # 输出 True,因为 a 和 c 引用了同一个对象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

还是那个同伟伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值