Python字符串😤小知识🤩

254 阅读10分钟

1字符串

  • 字符编码
  • 字符串
  • 字符串方法(函数)

1.1 字符编码

  • 字符编码

    • ASCII
    • GBK
    • Unicode
    • UTF-8

1.2 字符串

  • 什么是字符串

字符串是一种最常用的数据了类型,定义时使用'或者"将内容括起来。

字符序列,字符集合

Python 3的字符串使用Unicode

  • 转义字符

在字符串中使用\将某些字符进行转义,使其有特殊的功能,常用的有换行符\n、制表符\t、'表示'、"表示" 等等。可以在字符串前面加r不转移字符串中的\。

cartoon = 'Monty Python's Flying Circus'
cartoon = r'Monty Python's Flying Circus'
  • 三引号

定义字符串时,也可以使用三引号包括,它允许一个字符串跨多行书写,并且不使用\换行符。可以实现所见即所得的效果

html = """
    <html>
        <head>
        </head>
        <body>
            <h1>Hello, Python</h1>
        </body>
    </html>
"""
  • 下标

字符串中每个字符都有它自己的下标,我们可以使用下标\underline{下标}运算符来获取该下标位置的字符。

words = "abcdefg"
print(words[6])  # 打印g
print(words[-1])  # 打印g
  • 不可变

字符串是不可变数据类型,一旦定义后,里面的内容就不能改变。

  • 切片

字符串可以使用[头下标:尾下标]运算符截取子字符串又叫切片操作。

words = "abcdefg"
print(words[1:])  # 取出下标1后的字符
print(words[1:5])  # 取出下标1到下标4的字符
print(words[1:-1])  # 取出下标1到下标-2的字符
  • in 和not in

    • in 判断某个字符串是另外一个字符串的子字符串
    • not in 判断某个字符串不是是另外一个字符串的子字符串
greeting = "Hello Python"
name = "Python"
if name in greeting:
    print(name, "is a substring of", greeting)
else:
    print(name, "is not a substring of", greeting)
  • for ... in 操作

遍历字符串中的字符操作。

name = "张三"
for i in name:
    print(i)
​

代码练习1

#创建字符串
mystr='hello'#[index] - 通过索引访问字符串中的字符  
'''
字符串中每个字符分配一个其位置有关的整数,左边从0开始,称之为正索引,右边从-1开始,称之为负索引
 h  e  l  l  o
 0  1  2  3  4      从前面索引
-5 -4 -3 -2 -1      从后面索引
'''
# print(mystr[0])
# print(mystr[-5])
# print(mystr[-1])
# print(mystr[4])
#print(mystr[5])  # IndexError - 索引错误#[m:n] - 通过索引截取部分字符串,称为切片
# print(mystr[0:3])   #包含0对应的字符,但不包含3对应的字符
# print(mystr[:3])    #起始索引默认为0
# print(mystr[3:])    #从起始索引开始到结束 '''
# \ 转义字符
# \n - 换行
# \t - 制表符
# ' - 单引号
# " - 双引号
'''
# mystr="line1\nline2\nline3"
# mystr="w1\tw2\tw3" 
# mystr=""19.8",'2.0'"
# print(mystr) '''
字符串运算符
+ 字符串连接
* 重复输出字符串
in 成员运算符,如果字符串包含给定的字符返回True
not in 成员运算符,如果字符串不包含给定的字符返回True
% 格式化字符串
'''
# mystr="hello" + ","+"123"
# mystr="hello"*10
# print(mystr) # mystr="helloabc"
# b = "abc" in mystr 
# b = "aaa" not in mystr
# print(b)  # % 字符串格式化
'''
字符串格式化符号
%f  格式化浮点数字
%d  格式化整数
%s  格式化字符串
'''
# name="Zhang"
# age=20
# pi=3.1415926# print("My name is %s" % name)
# print("I am %d" % age) 
# print("pi is %.3f" % pi)# 新的格式化字符串的语法  Python3.6后新增
name = "zhang"
print(f"hello {name}") 

代码练习2

# 什么是字符串   - 字符集合(字符序列)
# 特殊的字符串   - 没有字符   ''#创建字符串,使用引号(单引号、双引号、三引号)
​
mystr = ''    # 空字符串
mystr = "hello"   
print(mystr)  
​
​
'''
字符串中每个字符都分配一个数字,称之为索引,左边从0开始,右边从-1开始
    h   e   l   l   o
    0   1   2   3   4       正索引
   -5  -4  -3  -2  -1       负索引 
'''
#使用[]获取字符串中的字符 
#单个字符
# print(mystr[0])  
# print(mystr[-5])  
# print(mystr[4])
# print(mystr[-1])   # print(mystr[5])   #报错,索引超出范围了   正索引最大取值=字符个数-1# [m:n] 获取起始索引到结束索引中间的多个字符,注意不包含结束索引的字符  - 切片
print(mystr[0:4])   #前闭后开 包括起始索引的字符,但不包括结束索引的字符
print(mystr[:4])    #如果不写起始索引,默认为0
print(mystr[1:])    #如果不写结束索引,取到字符串的最后一个字符
print(mystr[0:5:2])   #[起始索引:结束索引:步长]# len() - 获取字符串中字符的个数
print(mystr,"字符个数:",len(mystr))   
​
​
# 字符串创建后不能修改,但是变量可以修改(变量存放的是字符串的地址值)
print(id(mystr))     #id()   返回变量在内存中的地址 2631280156976
mystr="python"
print(mystr)   
print(id(mystr))    #变量在内存中的地址:2631280124144# \ 转义字符  
# \n    - 换行符   算一个字符
mystr = "line1\nline2\nline3"
# \t    - 制表符           
mystr = "w1\tw2\tw3"     
# \    -  普通的\
mystr = "a\b\c"   
print(len(mystr))      
# '    -  普通的'
# "    -  普通的"        
mystr = """的"                   
print(mystr)  
​
# 操作字符串的运算符
#  +   字符串的拼接
# mystr = 'hello' + 'python'
# print(mystr)  # *    字符串*整数   复制字符串
# mystr = "hello"*20
# print(mystr) # in 成员运算符  字符串中如果包含给定的部分字符串,返回True 否则返回False
mystr="hello python"
print("java" in mystr)
​
# not in 成员运算符  字符串中如果不包含给定的部分字符串,返回True 否则返回False
print("java" not in mystr) 
​
# %  格式化
'''
字符串格式化符号
%f  格式化浮点数字
%d  格式化整数
%s  格式化字符串 
'''
name = 'zhang'
age = 20
pi = 3.1415926print("My name id %s" % name)   
print("I am %d" % age) 
print("pi = %.3f" % pi)
​
print("%d" % int('123')) 
​

1.3 字符串方法

  • 字符串方法

    • capitalize()

      • 首字母转大写。
    • count(sub[, start[, end]])

      • 在指定索引start到end区间范围内去查找sub子字符串出现的次数。
    • len()

      • 返回字符串的长度
    • endswith(suffix[, start[, end]])

      • 检查字符串是否以某个子字符串作为后缀,start表示开始匹配的位置,end表示停止匹配的位置。
    • startswith(prefix[, start[, end]])

      • 检查字符串是否以某个子字符串作为前缀,start表示开始匹配的位置,end表示停止匹配的位置。
    • find(sub[, start[, end]])

      • 在字符串中查找第一次出现子字符串sub的索引位置,找不到返回-1,start设置起始索引,end设置结束索引。
    • rfind(sub[, start[, end]])

      • 在字符串中查找最后一次出现子字符串sub的索引位置,找不到返回-1,start设置起始索引,end设置结束索引。
    • index(sub[, start[, end]])

      • 和find方法一样,但是找不到时会抛出ValueError异常。
    • rindex(sub[, start[, end]])

      • 和rfind方法一样,但是找不到时会抛出ValueError异常。
    • sep.join(str)

      • 以sep作为分隔符,将str的每个字符进行分割,并返回分割后的新的字符串。
    • lower()

      • 将原来字符串中的字符全部转为小写字母返回。
    • upper()

      • 将原来字符串中的字符全部转为大写字母返回。
    • isalnum()

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

      • 如果一个字符至少有一个字符,并且所有的字符都是字母则返回True,否则返回False。
    • isdigit()

      • 如果一个字符至少有一个字符,并且所有的字符都是数字则返回True,否则返回False。
    • isspace()

      • 如果一个字符串至少有一个字符,并且全都是由空白字符组成则返回True,否则返回False。
    • istitle()

      • 如果一个字符串至少有一个字符,并且每个单词的首字母都是大写后面字符小写则返回True,否则返回False。
    • isupper()

      • 如果一个字符串至少有一个字符,并且里面的字母都是大写则返回True,否则返回False。
    • swapcase()

      • 将原字符串中大写字母转小写字母,小写字母转大写字母。
    • replace(old, new[, count])

      • 将原字符串中old字符替换成new字符返回,替换次数不超过count(默认全部替换)次。
    • split(sep=None[, maxsplit=-1])

      • 按照sep分割字符串,返回一个list对象,如果指定了maxsplit,则从左边开始分割maxsplit次。
    • rsplit(sep=None, maxsplit=-1)

      • 按照sep分割字符串,返回一个list对象,如果指定了maxsplit,则从右边开始分割maxsplit次。
    • strip()

      • 将前后的空白符或指定字符删除掉
    • lstrip([chars])

      • 截掉字符串左边的空格或指定字符。
    • rstrip([chars])

      • 截掉字符串边4的空格或指定字符。
    • casefold()

      • 将大写字母转小写字母。
    • center(width[, fillchar])

      • 指定字符串显示width,不足的地方使用fillchar(默认空格)字符填充,原字符串居中显示。
    • ljust(width[, fillchar])

      • 指定字符串显示width,不足的地方使用fillchar(默认空格)字符填充,原字符串靠左显示。
    • rjust(width[, fillchar])

      • 指定字符串显示width,不足的地方使用fillchar(默认空格)字符填充,原字符串靠右显示。
    • zfill(width)

      • 指定字符串显示width,不足的地方在左边使用0补齐。
    • max()

      • 返回字符串中值最大的字符
    • min()

      • 返回字符串中值最小的字符
    • str.encode(encoding="utf-8", errors="strict")

      • 将一个字符串按照指定编码转成其字节编码对象
    • expandtabs(tabsize=8)

      • 将字符串中的\t替换成空格,默认一个\t会替换成8个空格。

代码练习3

#字符串常用的函数# len() - 返回字符串的长度(字符串中字符的个数)
mystr=""
print(len(mystr))    #0# upper() - 字符串全部字符转为大写
mystr="hello"
print(mystr.upper())  
print(mystr)    #upper()不会改变原来的字符串# lower() - 字符串全部字符转为小写
mystr="HE" 
print(mystr.lower())  
print(mystr)
​
# capitalize() -字符串首字符转为大写
mystr="java"
print(mystr.capitalize()) 
print(mystr)  
​
# find() - 检查字符串是否包含给定的部分字符串,如果包含,返回索引值(>=0)  否则返回-1
mystr = "hello java hello"
# print(mystr.find("hello"))  # rfind() - 同find(),从右(right)开始找
# print(mystr.rfind("hello"))   # index() - 同find(), 不同之处在于:如果不包含给定的部分字符串,会抛出错误(而find()返回-1)   
# print(mystr.index("python"))   
​
​
# split() - 用给定的分割符把整个字符串分割为多个字符串,默认分隔符为空格
mystr="hello+java"
print(mystr.split("+"))  
​
# replace() - 把匹配到的内容用给定的部分字符串替换
mystr = "3+5+7+9"
print(mystr.replace("+","-"))
​
# strip() - 删除字符串前后的给定的字符 , 默认删除空白符
mystr = "      hello python----- \n   "
mystr = mystr.strip()
mystr = mystr.strip("-")
print(mystr) 
​
# count() - 统计出字符串中给定的字符串出现的次数
mystr = "sfghjavajkl;jjavakl;l"
print(mystr.count("java"))  
​
# endswith()  -  检查字符串是否以给定的部分字符串结尾
# startswith() - 检查字符串是否以给定的部分字符串开头
mystr = "hello.py" 
print(mystr.endswith(".py"))   

不用解释器执行代码,请说出下面语句执行后的结果 string = "Python is good"

  1. string[1:20]
  2. string[20]
  3. string[3:-4]
  4. string[-10:-3]
  5. string.lower()
  6. string.replace("o", "0")
  7. string.startswith('python')
  8. string.split()
  9. len(string)
  10. string[30]
  11. string.replace(" ", '')

代码练习4

# join()   字符串作为连接符,将给定的字符序列连接成新的字符串
print('-'.join('hello'))  
# max()  返回值最大的字符
print(max('hellojavaw')) 
# min()  返回最小的字符
print(min('hellojava')) 
​
# format()    
print("My name is {name}, I am {age}".format(name='zhangsan',age=20))