04-Python基础知识学习---字符串类型

字符串的声明

  字符串就是一系列的字符,在python中使用 单引号或者双引号 括起来的就是字符串:

# 使用单引号定义字符串 
name1 = '张三' 
print(type(name1))  #  

# 使用双引号定义的字符串 
name2 = "李四" 
print(type(name2))  # 

  如果字符串中包含单引号或者双引号需要注意:

  • 如果字符串中包含单引号,那么就需要使用双引号声明字符串
  • 如果字符串中包含双引号,那么就需要使用单引号声明字符串
# 包含单引号的字符串
message1 = "This's Python"
print(message1)  # This's Python

# 包含双引号的字符串
message2 = 'Say "Hello World"'
print(message2)  # Say "Hello World"

  除此之外还可以通过反斜杠转义符来实现:

# 包含单引号的字符串
print('I can\'t swim')

# 包含双引号的字符串
print("say \"Hello World\"")

  在python中还可以使用 多引号 来声明字符串,使用多引号声明的字符串可以换行:

# 多行字符串 
message = '''
第一行字符串 
第二行字符串 
第三行字符串 
''' 
print(message) 
# 第一行字符串 
# 第二行字符串 
# 第三行字符串

  使用单引号或双引号同样可以实现字符串的换行效果,但是需要借助转义符来实现:

# 通过转义符来实现字符串换行 
message = "第一行\n第二行\n第三行" 
print(message) 
# 第一行 
# 第二行 
# 第三行

  字符串还提供了 str() 方法,该方法可以将任意类型的数据转换成字符串类型:

# 数字转换成字符串 
print(type(str(10)))    #  
# 列表转换成字符串 
print(type(str([1, 2, 3])))   #  
# 字典转换成字符串 
print(type(str({"name": "jason", "age": 18})))  #  
# 元祖转换成字符串 
print(type(str((1, 2, 3)))) #  
# 集合转换成字符串 
print(type(str({1, 2, 3, 4})))  # 

字符串的运算

  字符串可以进行 相加相乘 运算:

  • 相加其实就是简单的字符串拼接
  • 相乘就相当于将字符串相加了n次
# 字符串的相加运算 
name = "张三" 
age = '18' 
print(name + "今年" + age + "岁")  # 张三今年18岁 

# 字符串的相乘运算 
print(name * 3) # 张三张三张三

注意: 虽然可以使用相加的方式拼接字符串,但是该方法效率很低,所以不建议使用。

访问字符串

按照索引访问

  可以使用 变量名 [索引值 ] 的方式读取字符串中的字符:

  • 当索引值是正数的时候表示正向取值(从左向右)
  • 当索引值是负数的时候表示反向取值(从右向左)
# 声明一个字符串
message = "Hello Wolrd"

# 正向取值
print(message[1])   # e

# 反向取值
print(message[-1])  # d

  字符串的 索引是从0开始的 ,如果 索引值超出了字符串范围就会报错

# 声明一个字符串 
message = "Hello Wolrd" 
# 超出索引的范围就会报错 
print(message[11]) 
# IndexError: string index out of range

  该方法只能按照索引取值,而 不能更改值

# 声明一个字符串 
message = "Hello Wolrd" 
# 使用索引的方式修改值会报错 
message[1] = 'H' 
# TypeError: 'str' object does not support item assignment

遍历字符串

  可以使用for循环遍历字符串:

# for循环遍历字符串 
for c in "Hello World":     
    print(c,end="-")     
# H-e-l-l-o- -W-o-r-l-d-

切片

  通过切片可以 获取指定范围的子字符串 ,它的基本语法如下: 变量名 [ 开始位置 : 结束位置 ] ,它会返回从开始位置到结束位置的子字符串( 包含开始位置,不包含结束位置 ):

# 声明一个字符串 
message = "Hello Wolrd" 
# 获取Hello 
# H的索引是0 , o的索引是4 
# 所以切片是从0 - 5 
print(message[0: 5]) # Hello

  可以省略开始位置和结束位置:

  • 省略开始位置表示从0开始
  • 省略结束位置表示一直取到最后
  • 同时省略开始和结束位置表示整个字符串的副本
# 声明一个字符串 
message = "Hello Wolrd" 
# 省略开始位置,表示从0开始 
print(message[: 5]) # Hello 

# 省略结束位置,表示一直取到最后 
print(message[6:])  # Wolrd 

# 同时省略表示取整个字符串 
print(message[:])   # Hello Wolrd

注意: 冒号是不可以被省略的。

  开始位置和结束位置的索引可以为负数,表示从右向左开始索引:

# 声明一个字符串 
message = "12345678" 
# 从右向左数第6个数到从右向左数第4个数之间 
print(message[-6:-4])   # 34

  使用切片时还可以传入第三个参数,用来表示步长:

# 声明一个字符串 
message = "12345678" 
# 设置步长 
print(message[::2])  # 1357

  步长也可以为负数,当步长为负数的时候表示从右向左取值:

# 声明一个字符串 
message = "12345678" 
# 步长为负数的时候表示从右向左取值 
# 下面的代码是用来反转字符串 
print(message[::-1])   # 87654321

成员运算符

  成员运算符用来判断一个字符串是否是另外一个字符串的子字符串:

  • a in b: b是不是包含a
  • a not in b: b是不是不包含a
# 声明字符串 
message = "hello" 
# msg2 是否包含 msg1 
print("ell" in message) # True 
# msg2 是否不包含 msg1 
print('ell' not in message) # False

格式化字符串

修改字符串的大小写

  • title():以首字母大写的方式显示每个单词
  • upper():将字符串改为全部大写
  • lower():将字符串改为全部小写
  • capitalize():首个单词的首字母大写
  • swapcase():大小写翻转
message = "stephen Curry" 
# 首字母大写 
print(message.title())  # Stephen Curry 
# 全部大写 
print(message.upper())  # STEPHEN CURRY 
# 全部小写 
print(message.lower())  # stephen curry
# 首字母大写
print(message.capitalize()) # Stephen curry
# 反转大小写
print(message.swapcase())   # STEPHEN cURRY
# 原来字符串不会被修改 
print(message)          # stephen Curry 

注意:这些方法会返回修改后的新字符串, 不会改变原来的字符串

f 字符串方法

  要在字符串中插入变量的值,可以 在前引号前加上字母 f,再将要插入的变量放在花括号内 ,当Python显示字符串的时候会将每个变量都替换为其值:

# f-string的方法格式化字符串 
name = "张三" 
age = 12 
print(f"{name}今年{age}岁了")   # 张三今年12岁了

注意: 该方法是Python3.6引入的。

format方法

  f 字符串是Python3.6才引入的,在此版本之前可以使用字符串的内置方法format代替:

age = 18 
# My name is Tom, I'm 18 years old. 
print("My name is {name}, I'm {age} years old.".format(name="Tom",age=age))

  format括号内在传参数时完全可以打乱顺序:

age = 18 
# My name is Tom Tom, I'm 18 years old. 
print("My name is {name} {name}, I'm {age} years old.".format(name="Tom",age=age))

  如果 {} 中没有传入key值,那么传入的值会按照位置与 {} 一一对应 :

age = 18 
# My name is Tom, I'm 18 years old. 
print("My name is {}, I'm {} years old.".format("Tom",age))

  也可以把format传入的多个值当作一个列表,然后用 {索引} 取值 :

# my name is Tom, my age is 18! 
print('my name is {0}, my age is {1}!'.format('Tom', 18)) 
# my name is Tom, my age is 18! 
print('my name is {1}, my age is {0}!'.format(18, 'Tom'))

删除空白

  在程序中额外的空白可能会令人迷惑,比如 'python'' python ' 看起来几乎没有什么两样,但是对于程序来说它们是两个不同的字符串,在进行字符串比较的时候就会产生迷惑。Python提供了下面的方法来去除字符串首尾的空白:

  • rstrip:去除字符串末尾的空白
  • lstrip:去除字符串开头的空白
  • strip:去除字符串两边的空白
# 声明一个变量 
name = "  中间的字符  " 
print("开头的字符" + name + "结尾的字符") # 开头的字符  中间的字符  结尾的字符 
# 去除开头的空白 
print("开头的字符" + name.lstrip() + "结尾的字符") # 开头的字符中间的字符  结尾的字符 
# 去除末尾的空白 
print("开头的字符" + name.rstrip() + "结尾的字符") # 开头的字符  中间的字符结尾的字符 
# 去除两边的空白 
print("开头的字符" + name.strip() + "结尾的字符") # 开头的字符中间的字符结尾的字符

注意: 这三个方法都不会修改原来的字符串,而是将去除空白的字符串作为新的字符串返回。

  可以在方法中传入参数,用来删除首尾指定的字符:

# 声明字符串 
message = "****Hello*****" 
# 删除开头的* 
print(message.lstrip('*'))  # Hello***** 
# 删除结尾的* 
print(message.rstrip('*'))  # ****Hello 
# 删除两端的* 
print(message.strip('*'))   # Hello

字符串对齐方法

  • center:字符串居中显示,不够的填充
  • ljust:字符串左对齐显示,不够的填充
  • rjust:字符串右对齐显示,不够的填充
  • zfill:字符串右对齐显示,不够用0填充
print("Tom".center(30, "-"))    # -------------Tom--------------
print("Tom".ljust(30, "-"))     # Tom---------------------------
print("Tom".rjust(30, "-"))     # ---------------------------Tom
print("Tom".zfill(30))          # 000000000000000000000000000Tom

expandtabs方法

  该方法用来 修改 \t (制表符)代表的空格数

print("Hello\tWorld")                   # Hello    World
print("Hello\tWorld".expandtabs(1))     # Hello World

组织字符串

获取字符串长度

  可以通过 len() 方法 获取字符串的长度:

# 声明一个字符串 
message = "Hello Wolrd" 
# len获取字符串的长度 
print(len(message)) # 11

分隔字符串

  可以使用 split方法 分割字符串,默认情况下是使用空格分割字符串,返回的是一个列表:

# 声明字符串 
message = "Hello World" 
print(message.split())  # ['Hello', 'World']

  也可以传入参数指定分隔字符,按照括号内指定的字符切割字符串:

# 声明字符串 
message = "192.168.1.1" 
print(message.split('.'))  # ['192', '168', '1', '1']

  还可以传入第二个参数,指定分割的次数:

ip = "192.168.1.1" 
# ['192', '168', '1.1'] 
print(ip.split(".", 2))

  python还提供了 rsplit()方法 ,该方法刚好与split相反,从右往左切割,其它使用方法和split类似:

# 默认是用空白字符 
print("Hello World".rsplit())   # ['Hello', 'World'] 
# 第一个参数指定分隔符 
print("192.168.1.1".rsplit("."))    # ['192', '168', '1', '1'] 
# 第二个参数指定分隔次数 
print("192.168.1.1".rsplit(".", 2)) # ['192.168', '1', '1']

join方法

  该方法从可迭代对象中取出多个字符串,然后按照指定的分隔符进行拼接,拼接的结果为字符串:

# 从字符串中取出多个字符串,然后进行拼接 
print(",".join("123456"))   # 1,2,3,4,5,6 

# 从列表中取出多个字符串,然后进行拼接 
print(".".join(["192", "168", "2", "1"]))   # 192.168.2.1

replace方法

  该方法用新的字符替换字符串中旧的字符,语法: replace( '旧内容 ' , '新内容 ' )

# 替换字符 
print("Hello Python".replace("Python", "World"))    
# Hello World

  可以使用第三个方法指定修改的个数:

# 指定替换次数 
# Hello PP, I love Python 
print("Hello Python, I love Python".replace("Python", "PP", 1))

分析字符串

startswith和endswith

  • startswith(): 判断字符串是否以括号内指定的字符开头,结果为布尔值True或False
  • endswith(): 判断字符串是否以括号内指定的字符结尾,结果为布尔值True或False
# 声明字符串 
message = "Hello World" 
# 是否以指定字符串开头 
print(message.startswith("He")) # True 
# 是否以指定字符串结尾 
print(message.endswith("dd"))   # False

isXXX判断方法

  • isdigit、isdecimal、isnumeric: 判断字符串是否是纯数字组成,返回结果为True或False
    • isdigit: 可以识别bytes和unicode类型
    • isdecimal: 可以用来判断uncicode类型(bytes类型无isdecimal方法)
    • isnumberic: 可以用来判断unicode、中文数字和罗马数字(bytes类型无isnumberic方法)
num1 = b'4' #bytes 
num2 = u'4' #unicode,python3中无需加u就是unicode 
num3 = '四' #中文数字 
num4 = 'Ⅳ' #罗马数字 
# True True False False 
print(num1.isdigit(), num2.isdigit(), num3.isdigit(), num4.isdigit()) 
# True False False 
print(num2.isdecimal(), num3.isdecimal(), num4.isdecimal()) 
# True True True 
print(num2.isnumeric(), num3.isnumeric(), num4.isnumeric())

  三者都不能用来判断浮点数:

num1 = '4.3' 
# False False False 
print(num1.isdigit(), num1.isdecimal(), num1.isnumeric())
  • isalnum(): 字符串中既可以包含数字也可以包含字母
  • isalpha(): 字符串中只包含字母
  • isidentifier(): 判断字符串是不是合法的变量名
  • islower(): 字符串是否是纯小写
  • isupper(): 字符串是否是纯大写
  • isspace(): 字符串是否全是空格
  • istitle(): 字符串中的单词首字母是否都是大写
name = 'tony123' 
print(name.isalnum())       # True 
print(name.isalpha())       # False 
print(name.isidentifier())  # True 
print(name.islower())       # True 
print(name.isupper())       # False 
print(name.isspace())       # False 
print(name.istitle())       # False

查找字符串

find和rfind

  • find: 从指定范围内查找子字符串的起始索引,找得到则返回起始索引值,找不到则返回-1(可以指定查找位置)
  • rfind: 同find,从右向左查找
''' 
find的使用方法 
''' 
# 找到则返回索引 
print("12345".find("34"))   # 2 
# 找不到返回-1 
print("12345".find("9"))    # -1 
# 指定查找范围 
print("12345".find("3", 0, 2))  # -1 

''' 
rfind的使用方法 
''' 
# 找到则返回索引 
print("12345".rfind("4"))   # 3 
# 找不到返回-1 
print("12345".rfind("9"))    # -1 
# 指定查找范围 
print("12345".rfind("3", 0, 2))  # -1

index和rindex

  • index: 同find,但在找不到时会报错
  • rindex: 同index,从右向左查找
'''
index的使用 
''' 
# 找到返回索引 
print("12345".index("4"))   # 3 
# 指定查找范围 
print("12345".index("3", 0, 3))  # 2 
# 找不到报错 
# print("12345".index("9")) 

''' 
rindex的使用 
''' 
# 找到返回索引 
print("12345".rindex("4"))   # 3 
# 指定查找范围 
print("12345".rindex("3", 0, 3))  # 2 
# 找不到报错 # print("12345".rindex("9"))

count

  统计字符串在大字符串中出现的次数,可以指定查找的位置:

''' 
count的使用 
''' 
# 查找出现的次数 
print("Hello World".count("o")) # 2 
# 找不到返回0 
print("Hello World".count("1")) # 0 
# 可以指定查找范围 
print("Hello Wolrd".count("H", 1, 5))   # 0

你可能感兴趣的:(04-Python基础知识学习---字符串类型)