Python数据类型之字符串类型

字符串的表示

字符串是Python中最常用的数据类型之一,必须使用成对的引号包围来表示字符串,引号可以是单引号 ' 、双引号 " 、三引号''' """,格式如下:

a = 'hello'
b = 'python'
c = "I'm boy"
d = '''Hi, I'm Tom'''
e = """I
am Boy"""
print(type(e)) # <class 'str'>

注: 字符串是不可变的数据类型

字符串的下标、切片

字符串下标

获取指定下标的数据

words = 'zhangsan'
print(words[0]) # z
print(words[3]) # n
print(words[5]) # s
print(words[-1]) # n

注:下标从0开始,最后一个元素的的下标为-1

字符串切片

对于指定的对象,对其中部分的数据进行操作,叫做切片。字符串、列表、元组都支持切片操作。切片是从指定的字符串里面复制一段指定的内容,生成的是一个新的字符串。

语法:

序列[开始下标:结束下标:步长]

注意:

1.不包含结束位置下标的数据,正负整数都可以。

2.步长是选取间隔,正负整数都可以,默认的步长是1,不能为0。

示例:

m = 'abcdefghijk'

print(m[2:4])  # cd
print(m[2:4:1]) # cd
print(m[3:6:2]) # df
print(m[:3]) # abc 如果不指定开始下标,则默认从0开始 print(m[6:]) # ghijk 如果不指定结束下标,则选取到最后
print(m[:]) # abcdefghijk 如果不指定开始和结束,则选取所有 print(m[::-1]) # kjihgfedcba # 步长为负数,表示倒序选取
print(m[-4:-1]) # hij
print(m[-4:-1:-1]) # 不能选取数据 从-4开始到-1结束,选取方向为从左到右,但是步长为-1,则表示从右向左 print(m[-1:-4:-1]) # kji

字符串的常见操作

+: 字符串拼接

使用 + 拼接字符串

a = "hello"
print(a * 3) # hellohellohello
a = "Hello"
b = "World"
c = a + b
print(c) # HelloWorld

*: 字符串重复

使用 * 重复输出字符串

a = "hello"
print(a * 3) # hellohellohello

in: 判断字符是否存在

如果存在返回True,不存在返回False

str1 = "abcde"
print("a" in str1) # True
print("f" in str1) # False

not in: 判断字符是否不存在

如果不存在返回True,存在返回False,

str2 = "abcde"
print("a" not in str2) # False
print("f" not in str2) # True

del: 使用del关键字删除字符串

# 删除整个字符串
str1 = "abcd"
del str1
print(str1) # del删除的是变量,而不是数据
str2 = "hello"
str3 = str2
del str2
print(str3)

字符串的遍历

使用while循环

message = "你好呀Python"
i = 0
while i < len(message):
print(message[i])
i += 1

使用for循环

message = "你好呀Python"
for v in message:
print(v)

使用for循环和range()

message = "你好呀Python"
for index in range(len(message)):
print(message[index])

使用enumerate函数

message = "你好呀Python"
for index, value in enumerate(message):
print(index, value)

使用内置函数iter

message = "你好呀Python"
for v in iter(message):
print(v)

字符串常见的方法

Python中字符串对象提供了很多内置方法来操作字符串,在Python中字符串是不可变的,所以字符串所有相关的方法都不会改变原有字符串,都是返回一个新的字符串。

获取字符串的长度

len()方法

len方法用来获取字符串的长度。

test_str = 'Hello Python !'
print(len(test_str)) # 14

查找某个子串

find()

如果子串包含在该字符串中,则返回这个子串的下标,否则返回-1

语法:

字符串序列.find(子串, 开始位置下标, 结束位置下标)

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

示例:

test_str = 'Hello Python and World!'
print(test_str.find('Python')) # 6
print(test_str.find('hello')) # -1
print(test_str.find('and', 10, 20)) # 13

index()

如果子串包含在该字符串中,则返回这个子串的下标。

字符串序列.index(子串, 开始位置下标, 结束位置下标)

注意:使用index方法,当找不到对应的子串时,程序会报错。

示例:

my_str = 'Hello Python and World!'
print(my_str.index('World')) # 17
print(my_str.find('and', 10, 20)) # 13
print(my_str.index('Worlds')) # 程序会报错

count()

count方法用来查找子串出现的个数。

语法:

字符串序列.cout(子串, 开始位置下标, 结束位置下标)

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

示例:

my_str = 'Hello Python and and World!'
print(my_str.count('and')) # 2
print(my_str.count('and', 12, 16)) # 1
print(my_str.count('ands')) # 0

rfind()

和find()作用相同,但是查找方向是从右侧开始。

示例:

my_str = 'Hello Python and and World!'
print(my_str.rfind('and')) # 17
print(my_str.rfind('ands')) # -1

rindex()

和index()作用相同,但是查找方向是从右侧开始。

示例:

my_str = 'Hello Python and and World!'
print(my_str.rindex('and')) # 17
print(my_str.rindex('ands')) # 程序报错

修改字符串

注意:原字符串没有修改,只是返回新的字符串。

replace()

语法:

字符串序列.replace(旧的子串, 新的子串, 替换次数)

示例:

my_str = 'Hello World! Hello Python!'
new_str = my_str.replace('Python', 'Java')
print(my_str) # Hello World! Hello Python!
print(new_str) # Hello World! Hello Java!

split()

按照指定字符分割字符串,转为列表。

语法:

字符串序列.split(分割字符, num)

注: num表示的是分割字符出现的次数,即将来返回数据个数为num + 1

示例:

my_str = 'he and llo and  wor and ld!'
news_str = my_str.split('and')
print(news_str) # ['he ', ' llo ', ' wor ', ' ld!'] news_str2 = my_str.split('and', 2)
print(news_str2) # ['he ', ' llo ', ' wor and ld!']

partition()

指定一个分隔符,如果字符串包含指定的分隔符,将整个字符串拆分为包含三个元素的元组。第一个元素包含指定分割符之前的部分。第二个元素包含指定的字符串分隔符。第三个元素包含指定分割符后面的部分。

注:该方法搜索指定字符串的第一个匹配项。

str1 = "qwert-yuiop"
print(str1.partition("-")) # ('qwert', '-', 'yuiop') str2 = "qwert-yui-op"
print(str2.partition("-")) # ('qwert', '-', 'yui-op')

join()

将列表转为字符串

示例:

my_list = ['aa', 'bb', 'cc']
new_str = '...'.join(my_list)
print(new_str) # aa...bb...cc

capitalize()方法

将字符串第一个字符转为大写。

my_str = 'hello world!'
new_str =my_str.capitalize()
print(new_str) # Hello world!

title()

字符串中每个单词首字母大写。

my_str = 'hello world lalala'
new_str =my_str.title()
print(new_str) # Hello World Lalala

upper()方法

将字符串所有字符转为大写。

my_str = 'hello world lalala'
new_str =my_str.upper()
print(new_str) # HELLO WORLD LALALA

lower()

将字符串所有字符转为小写。

my_str = 'Hello WorlD PytHon'
new_str =my_str.lower()
print(new_str) # hello world python

strip()

删除字符串两侧空格

my_str = ' hello python '
print(my_str.strip()) # hello python

lstrip()

删除字符串左侧空格。

my_str = ' hello python ! '
print(my_str.lstrip()) # hello python !

rstrip()方法

删除字符串右侧空格。

my_str = ' hello python '
print(my_str.rstrip()) # hello python

ljust()

返回一个原字符串左对齐,并使用 fillchar 填充至指定长度 width 的新字符串,fillchar 默认为空格。

示例:

Python数据类型之字符串类型

rjust()

返回一个原字符串右对齐,并使用fillchar填充至指定长度 width 的新字符串。fillchar 默认为空格。

示例:

Python数据类型之字符串类型

center()

返回一个指定的长度 width 居中的字符串,fillchar 为填充的字符,默认为空格。

示例:

Python数据类型之字符串类型

字符串判断

startswith()

判断查字符串是否是以指定子字符串开头,如果是则返回True,否则返回False。如果指定start和end,则在指定范围内判断。

my_str = "Hello Python"
print(my_str.startswith("H")) # True
print(my_str.startswith("Hello")) # True
print(my_str.startswith("Hello P")) # True
print(my_str.startswith("Python")) # False

endswith()

检查字符串是否以指定子串结束,如果是则返回True,否则返回False,如果指定start和end,则在指定的范围内检查。

my_str = "Hello Python"

print(my_str.endswith('Python'))  # True
print(my_str.endswith('n')) # True
print(my_str.endswith('Hello')) # False

isalpha()

如果字符串至少有一个字符并且所有字符都是字母或中文字则返回True,否则返回False

my_str = "Hello"
print(my_str.isalpha()) # True my_str1 = "Hello Python"
print(my_str1.isalpha()) # False

isdigit()

如果字符串只包含数字则返回True,否则返回False。

my_str = "123"
print(my_str.isdigit()) # True my_str1 = "123abc"
print(my_str1.isdigit()) # False

isalnum()

如果字符串至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False。

my_str = "123"
print(my_str.isalnum()) # True my_str1 = "123 abc"
print(my_str1.isalnum()) # False my_str2 = "abc"
print(my_str2.isalnum()) # True

isspace()

如果字符串中只包含空白,则返回True,否则返回False。

my_str = "abc"
print(my_str.isspace()) # False my_str1 = " "
print(my_str1.isspace()) # True

encode()

将字符串按照指定方式编码。

name = "小明"
print(name.encode("utf-8")) # b'\xe5\xb0\x8f\xe6\x98\x8e'

decode()

将字符串按照指定方式解码。

name = "小明"
data = name.encode("utf-8")
print(data.decode("utf-8"))

注意: 用什么方式编码,就要以什么方式解码。

常见的字符编码

计算机只能处理数字(0和1),如果要处理文本,必须先把文本转为数字01才能处理。这种转换方式称为字符编码。

常见的字符编码如下:

  • ASCII编码

ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符,基础ASCII码使用7位二进制数来表示所有的大写和小写字母、数字0到9、标点符号以及一些特殊字符。每一位0或者1所占的空间单位为bit(比特),这是计算机中最小的表示单位,每8个bit组成一个字符,这是计算机中最小的存储单位。

  • Unicode编码

为了解决传统的字符编码的局限,国际组织制定了Unicode编码,用来对世界上大部分的文字和符号进行编码,使电脑可以更方便的处理和展示文字。Unicode采用16位编码空间,每个字符占2个字节。

  • UTF-8编码

使用统一的Unicode编码,乱码问题从此消失了,但是比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,英文字符还是用一个byte编码,汉字通常使用两个字节或三个字节表示。

转义字符

有很多特殊字符没有办法用普通字符表示,需要进行转义。python用反斜杠\ + 字符 进行转义。

如下常见的转义字符:

转义字符 描述
\(在行尾时) 续行符
\\ 反斜杠符号
\' 单引号
\" 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数,yy代表的字符,例如:\o12代表换行
\xyy 十六进制数,yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出

示例:

s = 'I\'m fine'
print(s) # I'm fine s = "Hel\tlo"
print(s) # Hel lo

原始字符串

在字符串前加上r可以防止字符转义,比如当字符串中出现'\n',想要原样输出时。

my_str = "abc\ndef"
print(my_str) my_str2 = r"abc\ndef"
print(my_str2)
上一篇:vue搜索功能


下一篇:《Genesis-3D开源游戏引擎--横版格斗游戏制作教程03:碰撞检测》