Python 初学者的第三天学习(😀)

83 阅读12分钟

字符串

基本特点:

字符串的本质是:字符序列。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

转义字符:

通过使用 “+特殊字符” ,实现某些难以用字符表示的效果。

image-20210903104651078.png 字符串拼接:

通过使用多个 + 将多个字符串进行拼接

  1. 如果 + 的两边都是字符串,则拼接
  2. 如果 + 的两边都是数字,则进行运算
  3. 如果 + 的两边类型不同,则抛出异常

也可以通过将多个字符放在一起进行拼接

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

image-20210906172043726.png

可变字符串

可使用 io.StringIO(字符串);

运算符

假设有a、b两个变量

a = 10
b = 20
运算符描述实例
+加 - 两个对象相加a + b 输出结果 30
-减 - 得到负数或是一个数减去另一个数a - b 输出结果 -10
*乘 - 两个数相乘或是返回一个被重复若干次的字符串a * b 输出结果 200
/除 - x除以yb / 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。(ab) 输出结果 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

逻辑运算符

运算符逻辑表达式描述实例
andx and y布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。(a and b) 返回 20。
orx or y布尔"或" - 如果 x 是非 0,它返回 x 的计算值,否则它返回 y 的计算值。(a or b) 返回 10。
notnot 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。

身份运算符

运算符描述实例
isis 是判断两个标识符是不是引用自一个对象x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
is notis not 是判断两个标识符是不是引用自不同对象x is not y , 类似 id(a) != id(b) 。如果引用的不是同一个对象则返回结果 True,否则返回 False。

运算符优先级:(从高到低)

运算符描述
**指数 (最高优先级)
~ + -按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % //乘,除,取模和取整除
+ -加法减法
>> <<右移,左移运算符
&位 'AND'
位运算符
<= < > >=比较运算符
<> == !=等于运算符
= %= /= //= -= += *= **=赋值运算符
is is not身份运算符
in not in成员运算符
not and or逻辑运算符