字符串
在 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
空字符串有两种表示方法:
- 引号内部是空的,什么都没有,连空格都没有
- 用函数 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
浙公网安备 33010602011771号