字符串
基本特点:
字符串的本质是:字符序列。Python 的字符串是不可变的,我们无法对原字符串做任何修改。但是可以将字符串的一部分复制到新创建的字符串,达到 “看起来修改” 的效果。
Python 不支持单字符类型,单字符也是作为一个字符串使用的。
字符串的编码:
Python3 直接支持 Unicode,可以标识世界上任何书面语言的字符。Python3 的字符默认就是 16 位 Unicode 编码。ASCII 码是 Unicode 编码的子集。
使用内置函数 ord() 可以吧字符串转换成对应的 Unicode 码。 使用内置函数 chr() 可以吧十进制数字转换成对应的字符。
print(ord("A")) # 65
print(chr(66)) # B
创建字符串:
通过单引号或双引号创建字符串。(两者都可以创建字符串)
str1 = 'sease'
str1 = "sdgfsad"
使用三个单引号或者三个双引号创建多行字符串。
str3 = ''' name="sue" age="21" gender="male" '''
print(str3) # name="sue" age="21" gender="male"
空字符串和 len()函数
Python 允许空字符串的存在,不包含任何字符且长度为 0 。
str4=" "
print(len(str4)) # 2
len() 用于计算字符串含有多少字符:
str5="asdfsdf"
print(len(str5)) # 7
转义字符:
通过使用 “+特殊字符” ,实现某些难以用字符表示的效果。
字符串拼接:
通过使用多个 + 将多个字符串进行拼接
- 如果 + 的两边都是字符串,则拼接
- 如果 + 的两边都是数字,则进行运算
- 如果 + 的两边类型不同,则抛出异常
也可以通过将多个字符放在一起进行拼接
str6= '123''456';
print(str6)
字符串复制:
通过使用 * 实现字符串复制
str7 = "123"*3
print(str7)
不换行输出:
在使用 print 时会自动打印一个换行符。当我们不需要换行,不想要自动换行符时,使用参数 end="任意字符串",实现末尾台南佳任何内容
print("Hello",end=" ");
print("World")
# Hello World
获取控制台内容:input()
通过使用 input() 获取控制台读取键盘输入内容
name=input("请输入姓名:")
print(name)
# 请输入姓名:苏澳
# 苏澳
str() 转换为字符串类型
str() 可以将其他数据类型转换为字符串。
num = 123123
print(str(num))
使用 [] 提取字符串
字符串的本质就是字符序列,通过在字符串后面添加[],在[]里面指定偏移量,就可以提取该位置的打个字符。
正向搜索:最左侧第一个字符为 0,依次递增。
反向搜索:最右侧第一个字符为-1,依次递减
str8 = "abcdefg"
print(str8[1]) # b
使用 replace() 实现字符串替换
通过 replace() 我们并没有在原基础上的字符串做修改,而是重新创建出了新的字符串并将该位置进行替换
str9 = "1,2,3,4,5,6,7"
str10 = str9.replace("1","8")
print(str9) # 1,2,3,4,5,6,7
print(str10) # 8,2,3,4,5,6,7
使用 slice() 字符串切片
切片 slice 操作可以让我们开苏的提取子字符串。 标准格式为: [起始偏移量 start:终止偏移量 end:步长 step]
str11 = "abcdefghijklmn"
print(str11[0:1:1]) # a
print(str11[1:]) # bcdefghijklmn
print(str11[:1]) # a
【操作】 倒叙输出 “to be or not to be”
str12 = "to be or not to be"
print(str12[::-1]) # eb ot ton ro eb ot
使用 split() 切割字符串
split() 可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔符,则默认使用空白字符(换行符、空格、制表符)。
返回一个数组
str13 = "life is terrible"
print(str13.split()) # ['life', 'is', 'terrible']
print(str13.split("is")) # ['life ', ' terrible']
使用 join() 拼接字符串
用于将一系列的子字符串连接起来。
str14 = ["123","456","789"];
print("+".join(str14)) # 123+456+789
要点:
- 使用字符串拼接符+,会生成新的字符串对象,因此不推荐使用 + 来拼接字符串。
- 使用 join() 函数,因为 join 函数在拼接字符串之前会计算所有字符串的长度,然后逐一拷贝 。仅创建一次对象
import time
time01 = time.time()
a = ""
for i in range(1000000):
a+="sxt"
time02 = time.time()
print("运算时间:"+str(time02-time01)) # 运算时间:0.4503052234649658
# 使用
time03 = time.time()
li = []
for i in range(1000000):
li.append("xxx")
time04 = time.time()
print("运算时间:"+str(time04-time03)) # 运算时间:0.18450689315795898
字符串驻留机制
字符串驻留:仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。
Python 支持字符串驻留机制,对于符合标识符贵的字符串(仅包含下划线、字母和数字) 会启用字符串驻留机制。
字符串比较
使用 == 、 != 对字符串的值进行比较
使用 is、not is 对字符串的地址进行比较
使用 in、not in 判断某个字符(子字符串)是否窜在与字符串中。 字符串方法(其他)
| 符 号 | 描述 |
|---|---|
| %c | 格式化字符及其ASCII码 |
| %s | 格式化字符串 |
| %d | 格式化整数 |
| %u | 格式化无符号整型 |
| %o | 格式化无符号八进制数 |
| %x | 格式化无符号十六进制数 |
| %X | 格式化无符号十六进制数(大写) |
| %f | 格式化浮点数字,可指定小数点后的精度 |
| %e | 用科学计数法格式化浮点数 |
| %E | 作用同%e,用科学计数法格式化浮点数 |
| %g | %f和%e的简写 |
| %G | %F 和 %E 的简写 |
| %p | 用十六进制数格式化变量的地址 |
a 值为字符串 "Hello",b 变量值为 "Python":
| 操作符 | 描述 | 实例 |
|---|---|---|
| + | 字符串连接 | a + b 'HelloPython' |
| * | 重复输出字符串 | a * 2 'HelloHello' |
| [] | 通过索引获取字符串中字符 | a[1] 'e' |
| [ : ] | 截取字符串中的一部分 | a[1:4] 'ell' |
| in | 成员运算符 - 如果字符串中包含给定的字符返回 True | "H" in a True |
| not in | 成员运算符 - 如果字符串中不包含给定的字符返回 True | "M" not in a True |
| r/R | 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 | print r'\n' \n print R'\n' \n |
格式化操作符辅助指令:
| 符号 | 功能 |
|---|---|
| * | 定义宽度或者小数点精度 |
| - | 用做左对齐 |
| + | 在正数前面显示加号( + ) |
| 在正数前面显示空格 | |
| # | 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
| 0 | 显示的数字前面填充'0'而不是默认的空格 |
| % | '%%'输出一个单一的'%' |
| (var) | 映射变量(字典参数) |
| m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
| 方法 | 描述 |
|---|---|
| capitalize() | 把首字符转换为大写。 |
| casefold() | 把字符串转换为小写。 |
| center() | 返回居中的字符串。 |
| count() | 返回指定值在字符串中出现的次数。 |
| encode() | 返回字符串的编码版本。 |
| endswith() | 如果字符串以指定值结尾,则返回 true。 |
| expandtabs() | 设置字符串的 tab 尺寸。 |
| find() | 在字符串中搜索指定的值并返回它被找到的位置。 |
| format() | 格式化字符串中的指定值。 |
| format_map() | 格式化字符串中的指定值。 |
| index() | 在字符串中搜索指定的值并返回它被找到的位置。 |
| isalnum() | 如果字符串中的所有字符都是字母数字,则返回 True。 |
| isalpha() | 如果字符串中的所有字符都在字母表中,则返回 True。 |
| isdecimal() | 如果字符串中的所有字符都是小数,则返回 True。 |
| isdigit() | 如果字符串中的所有字符都是数字,则返回 True。 |
| isidentifier() | 如果字符串是标识符,则返回 True。 |
| islower() | 如果字符串中的所有字符都是小写,则返回 True。 |
| isnumeric() | 如果字符串中的所有字符都是数,则返回 True。 |
| isprintable() | 如果字符串中的所有字符都是可打印的,则返回 True。 |
| isspace() | 如果字符串中的所有字符都是空白字符,则返回 True。 |
| istitle() | 如果字符串遵循标题规则,则返回 True。 |
| isupper() | 如果字符串中的所有字符都是大写,则返回 True。 |
| join() | 把可迭代对象的元素连接到字符串的末尾。 |
| ljust() | 返回字符串的左对齐版本。 |
| lower() | 把字符串转换为小写。 |
| lstrip() | 返回字符串的左修剪版本。 |
| maketrans() | 返回在转换中使用的转换表。 |
| partition() | 返回元组,其中的字符串被分为三部分。 |
| replace() | 返回字符串,其中指定的值被替换为指定的值。 |
| rfind() | 在字符串中搜索指定的值,并返回它被找到的最后位置。 |
| rindex() | 在字符串中搜索指定的值,并返回它被找到的最后位置。 |
| rjust() | 返回字符串的右对齐版本。 |
| rpartition() | 返回元组,其中字符串分为三部分。 |
| rsplit() | 在指定的分隔符处拆分字符串,并返回列表。 |
| rstrip() | 返回字符串的右边修剪版本。 |
| split() | 在指定的分隔符处拆分字符串,并返回列表。 |
| splitlines() | 在换行符处拆分字符串并返回列表。 |
| startswith() | 如果以指定值开头的字符串,则返回 true。 |
| strip() | 返回字符串的剪裁版本。 |
| swapcase() | 切换大小写,小写成为大写,反之亦然。 |
| title() | 把每个单词的首字符转换为大写。 |
| translate() | 返回被转换的字符串。 |
| upper() | 把字符串转换为大写。 |
| zfill() | 在字符串的开头填充指定数量的 0 值。 |
| 字符串的格式化 |
一种格式化字符串的函数 str.format(). 它增强了字符串格式化的功能。 基本语法时通过 {}
# 0 1
str15 = "姓名:{name},年龄:{age}"
str16 = str15.format(name="Sue",age=18)
print(str16) # 姓名:Sue,年龄:18
可变字符串
可使用 io.StringIO(字符串);
运算符
假设有a、b两个变量
a = 10
b = 20
| 运算符 | 描述 | 实例 |
|---|---|---|
| + | 加 - 两个对象相加 | a + b 输出结果 30 |
| - | 减 - 得到负数或是一个数减去另一个数 | a - b 输出结果 -10 |
| * | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 200 |
| / | 除 - x除以y | b / a 输出结果 2 |
| % | 取模 - 返回除法的余数 | b % a 输出结果 0 |
| ** | 幂 - 返回x的y次幂 | a**b 为10的20次方, 输出结果 100000000000000000000 |
| // | 取整除 - 返回商的整数部分(向下取整) | 9//2 = 4 -9//2 -5 |
a = 10
b = 20
# 加法运算
c = a + b
print(c) # 30
# 减法运算
c = a - b
print(c) # -10
# 乘法运算
c = a * b
print(c) # 200
# 除法运算
c = a / b
print(c) # 0.5
# 取模运算
c = a % b
print(c) # 10
# 次幂运算
c = a**b
print(c) # 100000000000000000000
# 取整除运算
c = a // b
print(c) # 0
比较运算符
| 运算符 | 描述 | 实例 |
|---|---|---|
| == | 等于 - 比较对象是否相等 | (a == b) 返回 False。 |
| != | 不等于 - 比较两个对象是否不相等 | (a != b) 返回 true. |
| <> | 不等于 - 比较两个对象是否不相等。python3 已废弃。 | (a <> b) 返回 true。这个运算符类似 != 。 |
| 大于 - 返回x是否大于y | (a > b) 返回 False。 | |
| < | 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。 | (a < b) 返回 true。 |
| >= | 大于等于 - 返回x是否大于等于y。 | (a >= b) 返回 False。 |
| <= | 小于等于 - 返回x是否小于等于y。 | (a <= b) 返回 true。 |
# 等于 -- 比较两对象是否相等
if a == b:
print("a 等于 b")
else:
print("a 不等于 b")
# 不等于 - 比较两个对象是否不相等
if a != b:
print("a 不等于 b")
else:
print("a 等于 b")
# 大于 - 是否大于
if a > b:
print("a 大于 b")
else:
print("a 小于 b")
# 小于 - 是否小于
if a < b:
print("a 小于 b")
else:
print("a 大于 b")
# 大于等于 - 是否大于等于
if a >= b:
print("a 大于等于 b")
else:
print("a 小于 b")
# 小于等于 - 是否小于等于
if a <= b:
print("a 小于等于 b")
else:
print("a 大于 b")
赋值运算符
| 运算符 | 描述 | 实例 |
|---|---|---|
| = | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
| += | 加法赋值运算符 | c += a 等效于 c = c + a |
| -= | 减法赋值运算符 | c -= a 等效于 c = c - a |
| *= | 乘法赋值运算符 | c *= a 等效于 c = c * a |
| /= | 除法赋值运算符 | c /= a 等效于 c = c / a |
| %= | 取模赋值运算符 | c %= a 等效于 c = c % a |
| **= | 幂赋值运算符 | c = a 等效于 c = c a |
| //= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
# 简单复制
c = a + b
print(c) # 30
# 加法赋值
b += a
print(b) # 30
# 减法赋值
b -= a
print(b) # 10
# 乘法赋值
b *= a
print(b) # 200
# 除法赋值
b /= a
print(b) # 2.0
# 取模赋值
b %= a
print(b) # 0
# 幂赋值
b **= a
print(b) # 10240000000000
# 取整赋值
b //= a
print(b) # 2
位运算符
| 运算符 | 描述 | 实例 | ||
|---|---|---|---|---|
| & | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 | ||
| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 | ||
| 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 | |||
| ~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。 ~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。 | ||
| << | 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 | ||
| >> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位, >> 右边的数字指定了移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
# 按位与运算符
c = a & b
print(c) # 0
# 按位或运算符
c = a | b
print(c) # 30
# 按位异或运算符
c = a ^ b
print(c) # 30
# 按位取反运算符
c = ~a
print(c) # -11
# 左移运算符
c = a << 2
print(c) # 40
# 右移运算符
c = a >> 2
print(c) # 2
逻辑运算符
| 运算符 | 逻辑表达式 | 描述 | 实例 |
|---|---|---|---|
| and | x and y | 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 | (a and b) 返回 20。 |
| or | x or y | 布尔"或" - 如果 x 是非 0,它返回 x 的计算值,否则它返回 y 的计算值。 | (a or b) 返回 10。 |
| not | not x | 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not(a and b) 返回 False |
成员运算符
| 运算符 | 描述 | 实例 |
|---|---|---|
| in | 如果在指定的序列中找到值返回 True,否则返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
| not in | 如果在指定的序列中没有找到值返回 True,否则返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
身份运算符
| 运算符 | 描述 | 实例 |
|---|---|---|
| is | is 是判断两个标识符是不是引用自一个对象 | x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False |
| is not | is not 是判断两个标识符是不是引用自不同对象 | x is not y , 类似 id(a) != id(b) 。如果引用的不是同一个对象则返回结果 True,否则返回 False。 |
运算符优先级:(从高到低)
| 运算符 | 描述 |
|---|---|
| ** | 指数 (最高优先级) |
| ~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
| * / % // | 乘,除,取模和取整除 |
| + - | 加法减法 |
| >> << | 右移,左移运算符 |
| & | 位 'AND' |
| 位运算符 | |
| <= < > >= | 比较运算符 |
| <> == != | 等于运算符 |
| = %= /= //= -= += *= **= | 赋值运算符 |
| is is not | 身份运算符 |
| in not in | 成员运算符 |
| not and or | 逻辑运算符 |