字符串

在 Python 中,可以用一对双引号或者一对单引号表示字符串,也可以用三对双引号或者三对单引号表示字符串。

程序示例:

str1 = 'str1'
str2 = "str2"
str3 = """str3"""
str4 = '''str4'''
print(str1)
print(str2)
print(str3)
print(str4)

输出:

str1
str2
str3
str4

多行字符串需要用三对双引号或者三对单引号表示。

程序示例:

str1 = """hello 
world 
1"""
str2 = """hello 
world 
2"""
print("str1 = %s" % str1)
print("str2 = %s" % str2)

# 开头的引号后面如果没有紧跟着内容,而是换行了,那么输出字符串时,也会打印这个换行符
str3 = """
hello 
world 
3"""
print("str3 = %s" % str3)

输出:

str1 = hello 
world 
1
str2 = hello 
world 
2
str3 = 
hello 
world 
3

空字符串有两种表示方法:

  1. 引号内部是空的,什么都没有,连空格都没有
  2. 用函数 str() 创建一个空字符串

程序示例:

str1 = ""
str2 = str()

print("str1 = %s" % str1)
print("str2 = %s" % str2)

print("type(str1) = %s" % type(str1))
print("type(str2) = %s" % type(str2))

输出:

str1 = 
str2 = 
type(str1) = <class 'str'>
type(str2) = <class 'str'>

字符串有两种运算:字符串加法、字符串乘法。

程序示例:

str1 = "hello python"
str2 = "hello world"
str3 = str1 + str2  # 字符串加法,就是拼接字符串
print("str3 = %s" % str3)

str4 = str3 * 3  # 字符串乘法,就是重复字符串
print("str4 = %s" % str4)

输出:

str3 = hello pythonhello world
str4 = hello pythonhello worldhello pythonhello worldhello pythonhello world

字符串内包含双引号或者单引号时,字符串需要用另一种引号括起来,即用单引号或者双引号括起来,或者用三引号括起来。

程序示例:

str1 = "It's a string"
str2 = 'he said "Hi"'
# 也可以用转义字符
str3 = 'It\'s a string'
str4 = "he said \"Hi\""
print("str1 = %s" % str1)
print("str2 = %s" % str2)
print("str3 = %s" % str3)
print("str4 = %s" % str4)

# 也可以用三对字符串
str5 = """he said "Hi" !"""
print("str5 = %s" % str5)
# 但是,如果连在了一起则会报错
# str6 = """he said "Hi""""    # SyntaxError: unterminated string literal (detected at line 15)
# print("str5 = %s" % str6)

输出:

str1 = It's a string
str2 = he said "Hi"
str3 = It's a string
str4 = he said "Hi"
str5 = he said "Hi" !

字符串索引

可以使用索引获取一个字符串中指定位置的字符。

字符串的索引从左往右数是从 0 开始。-0 和 0 一样,因此,从右往左数是从 -1 开始。

Python 没有字符类型,所以单字符没有专用的类型,就是长度为一的字符串,即 str。

程序示例:

str1 = "Hello World"
print(type(str1[0]))

输出:

<class 'str'>

字符串索引越界会报错。

程序示例:

str1 = "Hello World"
# print(str1[100])  # 报错:IndexError: string index out of range

字符串切片

字符串的索引支持切片,切片的规则:左闭右开,包头不包尾。

切片支持三个参数:

[起始索引, 结束索引, 步长]

程序示例:

str1 = "Hello World"
# 不写步长参数时,默认为 0
print(str1[0:4])  # 包头不包尾
print(str1[:7])  # 省略起始索引,默认为 0
print(str1[2:])  # 省略结束索引,默认为最后一个字符,包括最后一个字符

输出:

Hell
Hello W
llo World

程序示例:

str1 = "Hello World"
# 写步长参数时,默认为 0
print(str1[::])  # 未明确指明步长,则步长为 1
print(str1[:2:4])
print(str1[:4:4])
print(str1[:5:4])
print(str1[::4])

输出:

Hello World
H
H
Ho
Hor

切片索引支持负数。

程序示例:

str1 = "Hello World"
print(str1[:-1])  # -1 索引表示最后一个字符 d,但是不包括 d
print(str1[1:-2])
print(str1[-4:-1])

输出:

Hello Worl
ello Wor
orl

起始索引与结束索引的大小关系,以及步长的正负,需要搭配好,否则可能输出空字符串。

步长为正时从左向右切片,步长为负值时从右向左切片。
步长为正时,从左向右切片,如果起始索引>结束索引,则返回空。
步长为负时,从右向左切片,如果起始索引<结束索引,则返回空。

程序示例:

str1 = "Hello World"
print("-" * 8)
print(str1[2:5])
print(str1[5:2])
print(str1[-5:-2])
print(str1[-2:-5])
print("-" * 8)

输出:

--------
llo

Wor

--------

步长为负数时,得到的字符串也是逆着的。

程序示例:

str1 = "Hello World"
print("-" * 8)
print(str1[2:5:-1])
print(str1[5:2:-1])
print(str1[-5:-2:-1])
print(str1[-2:-5:-1])
print("-" * 8)

输出:

--------

 ol

lro
--------

可以利用负数步长逆转字符串。

程序示例:

str1 = "Hello World"
print(str1[::-1])

输出:

dlroW olleH

切片步长不能为 0。

程序示例:

str1 = "Hello World"
# print(str1[1:5:0])  # ValueError: slice step cannot be zero

因为切片左闭右开,所以 s[:i] + s[i:] 总是等于 s。

程序示例:

str1 = "Hello World"
print(str1[:3] + str1[3:])

输出:

Hello World

字符串索引越界会报错,但是切片可以自动处理越界索引。

程序示例:

str1 = "Hello World"
# print(str1[100])  # 报错:IndexError: string index out of range
print(str1[100:])  # 空字符串
print(str1[100::])  # 空字符串
print(str1[2:100])  # 输出:llo World
print(str1[-100:-1])  # 输出:Hello Worl

对于使用非负索引的切片,如果两个索引都不越界,切片长度就是起止索引之差。例如,word[1:3] 的长度是 2。

字符串常用操作

程序示例:

str1 = "HelloWorld"
print(len(str1))  # 10
print(max(str1), min(str1))  # r H
del str1
# print(str1)  # NameError: name 'str1' is not defined. Did you mean: 'str'?
print('s' in 'HelloWorld')  # False
print('s' not in 'HelloWorld')  # True
print('heLLo'.upper())  # HELLO
print('HEllO'.lower())  # hello
print('abc' < 'def')  # True
print('abc' < 'abcd')  # True

程序示例:

# 遍历字符串
str1 = "HelloWorld"
for i in str1:
    print(i)

for index, value in enumerate(str1):
    print(index, value)

for i in range(len(str1)):
    print(i, str1[i])

程序示例:

s1 = '   hello   world    '
print("*" + s1 + "*")  # *   hello   world    *
print("*" + s1.strip() + "*")  # *hello   world*
print("*" + s1.lstrip() + "*")  # *hello   world    *
print("*" + s1.rstrip() + "*")  # *   hello   world*

程序示例:

s1 = 'hello   world good   moring'
print("*" * 30)
print(s1)
print(s1.split(" "))

结果:

******************************
hello   world good   moring
['hello', '', '', 'world', 'good', '', '', 'moring']

程序示例:

s1 = 'helloworldgoodmoring'
print(s1.find("o"))  # 4
print(s1.find("Z"))  # -1,找不到
print(s1.find("o", 6))  # 6
print(s1.find("o", 7))  # 11
print(s1.find("o", 100))  # -1,不会报索引越界

程序示例:

print("abc".join(["111", "222", "333"]))  # 111abc222abc333
posted @ 2025-10-06 07:55  YouKong  阅读(7)  评论(0)    收藏  举报