Python 字符串

1. 字符串了解

字符串最大用途是 设置其他值的格式,来完成拆分,合并,和查找等功能

1.1 字符串的基本操作

相对列表和元组而言,切片/索引/乘法/成员资格.长度.最小值.最大值均可用于字符串.

str1 = "你好,2018年,ai 中国"
str2 = max(str1)                         # 最大字符
print(str2)
print(type(str2))
print("*****完美分割线1******\n")
str2 = min(str1)                         # 最小字符,此次最小为空格符号
print(str2)
print(type(str2))
print("*****完美分割线2******\n")
str2 = len(str1)                         # 长度计算:计算结果为整数
print(str2)
print(type(str2))
print("*****完美分割线3******\n")
str2 = str1 * 2                         # 字符串 乘法:乘法结果并无空格
print(str2)
print(type(str2))
print("*****完美分割线4******\n")
str2 = str1 + str1                         # 字符串 相加: 相加结果中并无空格
print(str2)
print(type(str2))
print("*****完美分割线5******\n")
str2 = str1[0]                         # 索引动作:单个子元素位置索引
print(str2)
print(type(str2))
print("*****完美分割线6******\n")
str2 = str1[2:4]                         # 索引动作:子元素位置自2开始,至3结束
print(str2)
print(type(str2))
print("*****完美分割线7******\n")
str2 = str1[::2]                         # 索引动作:子元素位置自2开始,至3结束
print(str2)
print(type(str2))
print("*****完美分割线8******\n")
str2 = "你好"                        # 成员资格 in : 返回True 或者Flase
print(str2 in str1)
print(type(str2 in str1))
print("*****完美分割线9******\n")
str2 = "你好,2018年,ai 中国"
print(str2 == str1)                    # 比较运算符 字符串支持
print(type(str2 in str1))
print("*****完美分割线10******\n")
lst1 = ["你好","2018年","ai","中国"]
lst2 = ["你好","2018年","ai","中国"]
print(lst2 == lst1)                    # 比较运算符 字符串支持
print(type(lst2 in lst1))
lst3 = lst1[0]                         # 索引返回的是 ,与当前子元素的格式一样
print(lst3)
print(type(lst3))
print("*****完美分割线11******\n")
str1 = "你好","2018年","ai","中国"  # 此为元组
print(str1)
print(type(str1))


效果如下:
<class 'str'>
*****完美分割线1******


<class 'str'>
*****完美分割线2******

14
<class 'int'>
*****完美分割线3******

你好,2018年,ai 中国你好,2018年,ai 中国
<class 'str'>
*****完美分割线4******

你好,2018年,ai 中国你好,2018年,ai 中国
<class 'str'>
*****完美分割线5******<class 'str'>
*****完美分割线6******

,2
<class 'str'>
*****完美分割线7******

你,08,i中
<class 'str'>
*****完美分割线8******

True
<class 'bool'>
*****完美分割线9******

True
<class 'bool'>
*****完美分割线10******

True
<class 'bool'>
你好
<class 'str'>
*****完美分割线11******

('你好', '2018年', 'ai', '中国')
<class 'tuple'>


2.字符串的格式

字符串的格式,是调用字符串方法 format 实现字符串指定位置的赋值,

字符串 str = "   ", 而格式字符串为 str = " {   }". format()   或者  " {   }  {   }  {   } " . format() 

       或 str = " {{                }}" . format (      ).这取决于你希望结果中是否包含{},但{} 内 不可以有空格

        区分            赋值替换的位置        赋的值

替换字段包含以下信息

字段名   : 索引 或标识符 ,指出设置哪个值的格式,并使用结果 来替换字段,也可以指定特定值的特定部分,如列表元素


str1 = "{a} {b} {c} {d}"
print(str1.format(a=1, b=2, c=3, d=4))     #最简单情况下,只需向format()函数提供要设置其格式的未命名参数,并在格式字符串中,使用未命名字段.此时将按顺序将字段和参数配对.
print("*****完美分割线1******\n")
str2 = "{a}{}".format(2,a = 1)      #使用未命名字段.此时将按顺序将字段和参数配对,你也可以给参数指定名称,这种参数将用于对于的替换字段中,也可以混合使用.
print(str2)
print(type(str2))
print(str2[1])
print(type(str2[1]))                   #格式为字符串.
print("*****完美分割线2******\n")
str3 = "{0}{a}".format(2,a = 1)       #格式为字符串.
print(str3)
print(type(str3))
print(type(str3[0]))                   #格式为字符串.

效果如下

1 2 3 4
*****完美分割线1******

12
<class 'str'>
2
<class 'str'>
*****完美分割线2******

21
<class 'str'>
<class 'str'>


转换标志 : 跟在! 感叹号后面的部分.当前支持的字符包含 r (repr)   s (str)  a(ascii) ,如果你指定了转换标志,将不适用对象的本身的格式设置机制,而是使用指定函数的将                      对象转换为字符串,再做进一步设置.

print("*****完美分割线3******\n")
lst1 = ["China", "American", "Russia", "European Union"]
str4 = "{}{}{}"
str5 = "{}{}{}".format(lst1,lst1,lst1) # 参数可为字符串或列表
print(lst1)
print(str4)
print(str5)
print(type(str5))
print("*****完美分割线4******\n")
lst2 = ["China", "American", "Russia", "European Union"]
str6 = "I LOVE {}".format(lst2[0])
str7 = "they {country}".format(country = lst2)
str7 = "I Regret {country[1]}".format(country = lst2)# 参数可为列表具体的元素
print(lst2)
print(str6)
print(type(str6))
print(str7)
print(type(str7))
print(len(str7))


效果如下:
*****完美分割线3******

['China', 'American', 'Russia', 'European Union']
{}{}{}
['China', 'American', 'Russia', 'European Union']['China', 'American', 'Russia', 'European Union']['China', 'American', 'Russia', 'European Union']
<class 'str'>
*****完美分割线4******

['China', 'American', 'Russia', 'European Union']
I LOVE China
<class 'str'>
I Regret American
<class 'str'>
17


格式说明符 :跟在冒号后面的表达式,格式说明符 让我们能够详细的指定最终的格式,包含 格式类型(如 字符串 浮点数 或者十六进制),字段宽度和数的精度. 以及各种对齐方式 填充方式  或者如何显示百分位和千分位。

完成替换字段名后,可以设置参数的格式,首先我们尝试使用一个转换标志! 感叹号和r s a的使用,看下效果

str8 = "{i!r}  ,  {i!s}  ,  {i!a}".format(i = "π")# 转换标志 ! 感叹号
print(str8)
str9 = "{0}  ,  {0}  ,  {0}".format( "π")          # 无转换标志符
print(str9)
str9 = "{0}  ,  {0}  ,  {0}".format( "π")          # 无转换标志符
print(str9)
str10 = "this number is {pi:f}".format(pi = 3.14)          # 无转换标志符,f默认6位小数
print(str10)

效果如下:


'π' , π , '\u03c0'

π , π , π
π , π , π
this number is 3.140000


宽度/精度/千位分隔符

# 符号对齐 与用字符填充
#通常为了打印整齐的表格,对于负数符号,需要采用对齐,此处包含以下方式
#在指定的宽度/精度前面加上一个标志 0(填充0),加好+ (填充加好) 减号(填充-) 或者空格( ).
str18 = "{:010.2f}".format(3.1415926)                  # 冒号后第一位0,表示填充0
print(str18)
str18 = "{:+10.2f}".format(3.1415926)                  # 冒号后第一位+,表示填充1个加
print(str18)
str18 = "{:-10.2f}".format(3.1415926)                  # 冒号后第一位-,未填充上
print(str18)
print("*****完美分割线12******\n")
str18 = "{:<010.2f}".format(3.1415926)                  # 冒号后第一位<,表示左对齐
print(str18)
str18 = "{:>+10.2f}".format(3.1415926)                  # 冒号后第一位<,表示右对齐
print(str18)
str18 = "{:^-10.2f}".format(3.1415926)                  # 冒号后第一位^,表示居中
print(str18)
print("*****完美分割线13******\n")
str18 = "{:#<010.2f}".format(3.1415926)                  # 冒号后第一位#,表示左对齐,其他补充#
print(str18)
str18 = "{:#>+10.2f}".format(3.1415926)                  # 冒号后第一位#,表示右对齐,其他补充#
print(str18)
str18 = "{:#^-10.2f}".format(3.1415926)                  # 冒号后第一位#,表示居中,其他补充#
print(str18)
str18 = "{:=10.2f}".format(-3.1415926)                  # 冒号后第一位=,符号位与参数之间 填充 空格
print(str18)
str18 = "{:#=10.2f}".format(-3.1415926)                  # 冒号后第一位#=,符号位与参数之间 填充 #
print(str18)
str18 = "{:$=10.2f}".format(-3.1415926)                  # 冒号后第一位$=,符号位与参数之间 填充 $
print(str18)
print("*****完美分割线14******\n")
str18 = "{:-.2}".format(3.1415926)                  # 冒号后第一位 无,显示2位,对齐
print(str18)
print(len(str18))
str18 = "{:.2}".format(3.1415926)                  # 冒号后第一位 无
print(str18)
print(len(str18))
str18 = "{: .2}".format(3.1415926)                  # 冒号后第一位 空格,以便与下面对齐
print(str18)
print(len(str18))
str18 = "{:+.2}".format(3.1415926)                  # 冒号后第一位 加号 ,以便与下面对齐
print(str18)
print(len(str18))
str18 = "{:.2}".format(-3.1415926)                  # 冒号后第一位无,参数有负值,方便与上文对齐
print(str18)
print(len(str18))

效果如下:

0000003.14
 +3.14
 3.14
*****完美分割线12******

3.14000000
 +3.14
 3.14 
*****完美分割线13******

3.14######
#####+3.14
###3.14###
- 3.14
-#####3.14
-$$$$$3.14
*****完美分割线14******

3.1
3
3.1
3
 3.1
4
+3.1
4
-3.1
4



3.字符串的方法


常见的string 模块中的常量方法

import string
print(string.digits)                                   # 打印 0-9 字符串
print(string.ascii_letters)                            # 打印 所有大小写字母
print(string.ascii_lowercase)                            # 打印 小学字母
print(string.printable)                            # 打印 所有可打印的 ascii字符
print(string.punctuation)                            # 打印 所有可打印的 ascii标点字符
print(string.ascii_uppercase)                          #打印所有 大写字母


center

find

join

lower

replace

split

strip

translate

print("*****完美分割线21******\n")
tuple1 = str.maketrans("cs", "kz")  # translare 方法启用前,需要创建一个对换表,类似于获取 unicode码
print(tuple1)
str29 = "this is an incredible test"
print(str29.translate(tuple1))
tuple1 = str.maketrans("cs", "kz", " ")  # translare 方法 可在后方添加替换其他字符,比如空格
str29 = "this is an incredible test"
print(str29.translate(tuple1))
print("*****完美分割线21******\n")
import string
str30 = "this is an incredible test"
str31 = str30.isalnum()               # Python isalnum() 方法检测字符串是否由字母和数字组成
print(str31)
str31 = str30.isalpha()               # Python isalpha() 方法检测字符串是否只由字母组成
print(str31)
str31 = str30.isdecimal()               # Python isdecimal() 方法检查字符串是否只包含十进制字符
print(str31)
str31 = str30.isdigit()               # Python isdigit() 方法检测字符串是否只由数字组成
print(str31)
str31 = str30.isidentifier()               #isidentifier 是否满足标识符定义规则 标识符定义规则为:只能是字母或下划线开头、不能包含除数字、字母和下划线以外的任意字符。
print(str31)
str31 = str30.islower()               #islower) 方法检测字符串中所有的字母是否都为小写
print(str31)
str31 = str30.isnumeric()               #isnumeric() 方法检测字符串是否只由数字组成
print(str31)
str31 = str30.isprintable()               # isprintable() 判断是否为可打印字符串,例如制表符、换行符就不是可打印字符,但空格是
print(str31)
str31 = str30.isspace()               # isspace() 方法检测字符串是否只由空白字符组成
print(str31)
str31 = str30.isupper()               # isupper() 方法检测字符串中所有的字母是否都为大写
print(str31)
str31 = str30.istitle()              # istitle()  检测字符串中所有的单词拼写首字母是否为大写,且其他字母为小写
print(str31)


效果如下:
China, Spain to enhance partnership,Spain 
****China, Spain to enhance partnership,Spain*****
*****完美分割线15******

7
7
36
36
*****完美分割线16******

1+2+3+4+5
12345
*****完美分割线17******

china, spain to enhance partnership,spain
China, Spain To Enhance Partnership,Spain
China, Spain To Enhance Partnership,spain
*****完美分割线18******

China, Spain both enhance to partnership,Spain
*****完美分割线19******

['China, Spain to enhance partnership,Spain']
['1', '2', '3', '4', '5']
*****完美分割线20******

***China, Spain to  *** enhance partnership,Spain!!!!
 ***China, Spain to *** enhance partnership,Spain!!!! 
China, Spain to *** enhance partnership,Spain
*****完美分割线21******

{115: 122, 99: 107}
thiz iz an inkredible tezt
thizizaninkredibletezt
*****完美分割线21******

False

False
False
False
False
True
False
True
False
False
False
posted @ 2018-12-21 19:23  芒果侠  阅读(190)  评论(0编辑  收藏  举报