python的字符串

字符串

在python中,有这样一些类型,它们的成员是有序排列的,并且可以通过下标访问成员,这些类型称之为有序序列,包括:列表、range、元组和字符串;其中列表的成员可修改,属于可变序列,字符串和元组,成员不可修改,属于不可变序列。序列有共同操作:

  • 成员关系运算(in,not in)
  • 连接操作(+)
  • 重复操作(*)
  • 切片操作([::])

1.字符串定义

字符串就是由若干个不同的unicode字符组成的不可变有序序列

#单引号字符串
str1 = '天要下雨,娘要嫁人,由他去吧'
str2 = str()  #空串
str3 = str([10,20,30])

#双引号字符串
str2 = "天要下雨,娘要嫁人,由他去吧"

#三引号字符串 多行字符串
str3 = '''
好雨知时节
当春乃发生
'''
str4 = """
随风潜入夜
润物细无声
""

2.获取字符

因为是不可变序列,所以不能修改单个字符;凡是修改字符串的操作都产生新串

字符串中的元素分别被编了号,这些编号被称为索引【下标,角标】
	 字符串索引: 
		        从左向右开始编号:0,1,2....n-1
                 从右向左编号:  -1,-2......
                  -5 -4 -3 -2 -1
                  "h  e  l  l  o"
                   0  1  2  3  4  

str1 = '天要下雨,娘要嫁人,由他去吧'
print(str1[0],str1[-1]) #天 吧
  • 字符串遍历

字符串的遍历就是访问字符串的每一个字符,可以使用while循环和for-in循环。经常使用for-in循环遍历字符串

for-in语法:

for 变量名 in 字符串:
     语句块A
else:
      语句块B

说明:主要用于遍历序列【遍历:依次访问序列中的每一个元素,获取元素值】

工作原理:按照顺序获取列表中的每个元素,赋值给变量,再执行语句块A,以此类推,直到列表中的元素全部获取为止,循环终止后执行else语句块B。

for ch in 'hello world':
	print(ch)

3.字符串转义

  • 常见转义字符
    转移字符 说明 转移字符 说明
    ' 单引号 " 双引号
    \n 换行 \r 回车
    \t tab \ \
  • 原生字符
    如果在字符串中不把\当做转移字符,可以使用
    str1 = r'c:\wh1803\course\1'
    print(str1) #c:\wh1803\course\1

4.序列通用操作

#1 字符串拼接
#对于字符串字面值,只要相邻两个字符串中间没有其他字符就会自动拼接为一个字符串
str1 = '中美达成共识'
        '不打贸易战'
print(str1) #中美达成共识不打贸易战

#其他情况使用+运算符拼接字符串
str1 = '你好'
str2 = ' 树先生'
print(str1 + '世界')
print(str1 + str2)

#2.字符串重复
str1 = '汪' * 3
print(str1) #汪汪汪

#3.成员操作
str1 = '天要下雨,娘要嫁人,由他去吧'
if '天' in str1:
    print('是成员')
else:
    print('不是成员')

#4.字符串截取(切片)
#语法:字符串[开始下标:结束下标:步长],表示按指定步长获取从开始下标到结束下标之间的元素,
#     结果为一个新的字符串
#注意:包头不包尾【前闭后开区间】   [开始下标,结束下标)
#步长:默认是1,正数表示从左向右取,负数表示从右向左取
str1 = '123456'
print(str1[0:2]) #'12'  从下标0取到下标1
print(str1[1:]) #'23456' 从下标为1的元素渠道末尾
print(str1[::2]) #'135' 隔一个取一个
print(str1[:]) #'123456' 从头取到尾,取所有字符
print(str1[::-1]) #'654321' 从右向左去
print(str1[-3::-1]) #4321 从右边下标为-3的字符向左取所有字符,

#5.字符串长度
print(len(str1))

5 字符串常用函数

5.1 字符串查找和替换

str1 = 'a fox jumped over the fence'

方法名 说明 示例
str.count(sub,start=0,end=len(string)) 查找子串sub出现的次数;start从指定下标开始查,end结束下标 str1.count('f')
str.find(str, beg=0, end=len(string)) 从左向右检测字符串中是否包含子字符串 str,如果包含返回下标,否则返回-1。beg和end是可选参数,指定查找范围 str1.find('fox')
str.rfind(sub[, start[, end]]) 从右向左检测字符串中是否包含sub子串,包含返回子串的下标,否则返回-1 str1.rfind('fox')
str.index(sub[, start[, end]]) 作用类似find,但子串sub不存在会报错ValueError str1.index('fox')
str.rindex(sub[, start[, end]]) 从右向左检测,类似rfind,会报ValueError str1.rindex('fox')
str.replace(old, new[, count]) 返回一个新字符串,原串中的old被替换为new,可选参数count指定替换次数。 str1.replace('a','many')

5.2 字符串分隔和组合

方法名 说明 示例
str.split([sep[, num=count(sep)]]) 将字符串拆分为以sep为分隔符的列表,如果指定num,则最多拆分num次 str1.split(' ')
str.rsplit([sep[, num=count(sep)]]) 从右向左拆分
str.partition(seq) 将字符串拆分为一个有三个元素的元组(seq前的字符串,seq,seq后的字符串)。
str.rpartion(seq) 同上
str.splitlines([keepends]) 拆分一个包含多行的字符串,以每行为一个元素返回一个列表。keepends是一个True字符或非零整数,表示保留行尾标志(即换行符)
str.join(seq) 以指定字符串str作为分隔符,将seq对象中所有的元素(字符串表示)合并为一个新的字符串;seq可以是字符串、列表等

5.3 字符串判断

方法 说明 示例
str.isalpha() 判断字符串是否由字母构成并且只包含字母,是返回True,否返回False str1.isalpha()
str.isalnum() 检测字符串是否由字母和数字组成,如果都是数字或字母返回True,否则返回False
str.isdigit() 检测字符串是否由数字构成,可检测byte类型
str.isdecimal() 检测字符串是否由数字构成
str.isnumeric() 检测字符串是否由数字构成, 可以检测汉字数字:十
str.isspace() 检测字符串是否只有空格或tab构成
str.islower() 检测字符串中的字母字符是否全部由小写字母组成
str.isupper() 检测字符串中的字母字符是否全部由大写写字母组成
str.startswith(suffix[, start[, end]]) 用于判断字符串是否以指定子字符串开头,如果是则返回True,否则返回False。
str.endswith(suffix[, start[, end]]) 用于判断字符串是否以指定子字符串 结尾,如果是则返回True,否则返回False。

5.4 字符串转换(产生新的字符串)

方法 说明 示例
str.lower() 字符串转小写
str.upper() 字符串转大写
str.swapcase() 把字符串中的大小写字母互换,大写转换成小写,小写转换成大写。不去管非字母类字符。
str.capitalize() 将字符串的第一个字符转换为大写, 其余转换为小写
str.title() 字符串中每个单词的首字母大写,其余小写。
str.lstrip([chars]) 去除字符串左边指定的字符,默认是去除空格
str.rstrip([chars]) 去除字符串左边指定的字符,默认是去除空格
str.strip([chars]) 去除字符串两边边指定的字符,默认是去除空格

6. 字符串格式化

  • 用%格式化
    %[flags][width][.precision]typecode
    flags:对其方式,-左对齐 +右对齐(默认),0表示用0填充(只针对数值型),默认是用空格填充
    width:所占宽度,单位是列
    .precision: 精度,如果带小数点,可以指定带几位小数,指定后会四舍五入
    typecode: d 将数值转换为整型显示;f 将数值转换为浮点数显示 s将数值转换为字符串显示
    #大家好,我叫 王尼玛,我今年35岁了,我有5000000.69
    print("大家好,我叫%+6s,我今年%d岁了,我有%10.2f" % ('王尼玛',35,5000000.687))

  • 用format格式化

    [[fill]align][sign][#][width][.precision][type]
    fill: 填充字符,可选
    align: 对齐方式  <左对齐  >右对齐  ^居中对齐
    sign:显示符号,+正数显示正号,负数显示符号;-正数不显示符号,负数显示符号
    #: 对于2、8、16进制会显示0b 0o 0x
    width: 宽度
    , 千分位分隔符
    .precision:精度
    type: s字符串  d整型  f浮点数
    
    tp1 = "I am {}, age {}, {}".format("seven", 18, 'alex')
    tp2 = "I am {name}, age {age}, really {name}".format(name="seven", age=18)
    tp3 = "I am {:s}, age {:d}, money {:.0f}".format("seven", 18, 88888.1)
    print(tp1) #I am seven, age 18, alex
    print(tp2) #I am seven, age 18, really seven
    print(tp3) #I am seven, age 18, money 88888
    
posted @ 2020-04-18 23:24  成少雷  阅读(364)  评论(0编辑  收藏  举报