字符串与数字

python数据类型

  • python 创建和控制的实体称为对象(object),它们可以是变量、数组、字符串、函数或结构。

  • 由于 python是一种所见即所得的脚本语言,故不需要编译。

  • 在 python里,对象是通过名字创建和保存的。

  • 可以用who 命令来查看当前打开的 python 环境里的对象,用 del删除这些对象。

      who
      c=3
      who
      del c
      who
    

显示:

notebook	 sys
c	 notebook	 sys
notebook	 sys

上面列出的是新创建的数据对象x的名称。python 对象的名称必须以一个英文字母打头, 并由一串大小写字母、数字或下画线组成。创建对象时不要用点号,容易跟属性造成混淆。

注意:python 区分大小写,比如,Orange与 orange 数据对象是不同的。

不要用 python的内置函数名作为对象的名称,如 who/del 等。

python基本数据类型

Python3 中有六个标准的数据类型:

Number(数值)
String(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)

Python3 的六个标准数据类型中:

不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
  • 数值

数字的基本类型

Python 支持五种基本数字类型:

int (有符号整数)
long (长整数)
bool (布尔值)
float (浮点值)
complex (复数)

这里要特别注意:
 1.在Python2中支持的long,在Python3中不再支持。在Python 3里,只有一种整数类型int,表示为长整型。
 2.在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加。

数值运算

实例:

>>> 5 + 4  # 加法
9
>>> 4.3 - 2 # 减法
2.3
>>> 3 * 7  # 乘法
21
>>> 2 / 4  # 除法,得到一个浮点数
0.5
>>> 2 // 4 # 除法,得到一个整数
0
>>> 17 % 3 # 取余
2
>>> 2 ** 5 # 乘方
32

原文链接:https://blog.csdn.net/qq_41575507/article/details/106060204

数值型

整数类型:int

 Python3 中的整数最大的特点就是“不限制大小”。在Python2 中支持的 long ,在 Python3 中不再支持。在 Python3 里,只有一种整数类型 int,表示为长整型。那么这个 int 在 Python 中所表示的范围到底能有多大呢?给出的解释是:Python 长整数仅受限于用户计算机的虚拟内存总数。基本可以这么说:Python3 的int长度理论上是无限的。所以在 Python 你不必像在C语言或者 java 中一样考虑我是用 int 还是 long 还是 long long 等等。在 Python3 中我们只需要计算就可以了。比如我们计算一下2的100次方等于多少:

>>> 2**100
1267650600228229401496703205376

我们直接在Python自带的IDLE中输入2**100即可计算出结果,如果我们是使用的C语言无论是使用long型还是long long型,肯定会出现数据溢出的情况。因为在C语言中:

long型所表示的范围为:-2147483648 ~ +2147483647 (4 Bytes)
long long所表示的范围为:-9223372036854775808 ~ +9223372036854775807 (8 Bytes)

通过这个例子,我们直接就体会到了Python对于大数的处理的方便性。在Python中无论多复杂的算式都可以直接的出结果。

  • 常见的运算

我们还可以使用divmod()这一内置函数直接求整数除法和余数。例如我们求divmod(m,n) 使用这个方法会得到两个整数,一个是m // n,另一个是m %n

m ** n 求乘方,即整数m的n次方,上面的2 ** 100就是2的100次方。 abs(m) 求m的绝对值 bin(m) 将数值m转换为二进制数,例如

>>> x = 10
>>> x
10
>>> bin(x)
'0b1010'

oct(x) 将数值x转换为八进制,例如:

>>> n = 0b1001
>>> oct(n)
'0o11'

hex(x) 将数值x转换为十六进制,例如:

>>> x = 0o11
>>> x
9
>>> hex(x)
'0x9'

直接输出x,Python默认将该数值转换为10进制输出

  • 其他常用的数学运算函数
  • 随机数函数

&Python3中的随机数函数用于生成随机数,比如我们要写一个猜数字的游戏就需要用到随机数,或者是当我们写一个游戏需要使用到随机数时(比如大富翁游戏的掷骰子)等等。常见的随机数的生成函数有以下几种:

例如:

## 生成10个随机数
>>> import random
>>> for i in range(10):
    print(random.randint(0,100))
    
97
2
40
28
86
25
67
69
91
58
  • 大小比较

 在Python中我们也可以对数值的大小进行比较。我们可以使用比较运算符来进行两个数的比较,在Python中我们还可以进行连续的比较,比如:

>>> 7 > 3 >= 2
True
>>> 7 < 3 >= 0
False

我们会发现和上面表中的一样,如果表达式正确,那么会返回True,错误则会返回False。我们可以用这个来控制循环,比如满足条件就继续循环,不满足就结束循环,这个在以后的博客中也会详细的说明。

  • 数的进制

 在常见运算中也写到了关于进制转换的内置函数,Python中同样也有二进制、八进制、十进制、十六进制。

在Python中二进制(binary)以前缀0b或者0B开头,注意这里的是阿拉伯数字0而不是字母o,千万不要输错了。使用bin()函数来返回对应数值的二进制。比如:

>>> x = 0b1111
>>> x
15
>>> bin(x)
'0b1111'
>>> x = 0B1101
>>> x
13
>>> bin(13)
'0b1101'

八进制(octal)以前缀0o或者0O开头,同样也要注意是阿拉伯数字0和字母o | O,要注意区分。使用oct()函数返回相应数值的八进制。

十进制无前缀数字,使用int()即可将其他进制转换为十进制。

十六进制(hexadecimal)以前缀0x或者0X开头,使用hex()函数将其他数值转换为十六进制。

浮点数类型:float

浮点数的操作与上面的整数操作类似。但是浮点数受到17位有效数字的限制,浮点数一般只有17位有效数字,如果超过17位那么就要使用科学计数法来表示

  • 浮点数的特性

由于浮点数在计算机中是以二进制来表示的,所以有些时候浮点数在转换以及运算过程中难免会产生一些误差。所以有的时候我们会发现一些匪夷所思的错误。比如我们计算一下2.1+4.2结果肯定为6.3呀,但是如果我们在IDLE中计算一下,却发现结果为6.300000000000001,比较的结果是False。

>>> 2.1 + 4.2
6.300000000000001
>>> 2.1 + 4.2 == 6.3
False

为什么会这样呢???其实就是因为在计算机进行进制转换的时候产生了微小的误差。所以我们用到浮点数的时候,当我们进行比较的时候最好不要用 ==来比较。而是将它们做差,如果他们之间的差小于一个很小很小的数,我们就认为这两个浮点数相等。

复数类型

Python中内置了复数类型。Python可以支持所有有关复数的常见运算。比如加、减、乘、除、乘方等等。我们可以使用.real来取出复数的实部,使用.imag取出复数的虚部。

复数的表示在数学中是a+bi,但是在实际编程中因为i与阿拉伯数字1太接近了,不好区分,所以在Python中用j代表i,即a+bj。

  • 复数的比较

复数之间只能比较是否相等,不能比较大小。这也是数学上的真理,所以在Python中的复数也只能比较两个复数是否相等,不能比较大小。

  • 复数的应用

求平面上两个点(x1,x2)和(y1,y2)之间的距离。

abs((4+3j)+(1+6j)) 10.295630140987 abs(1+1j) 1.4142135623730951

  • 更多的数学函数

 Python中不止有上面提到的数学函数,还有很多其他的函数。Python 中数学运算常用的函数基本都在 math 模块、cmath 模块中。

Python math 模块提供了许多对浮点数的数学运算函数。

Python cmath 模块包含了一些用于复数运算的函数。

cmath 模块的函数跟 math 模块函数基本一致,区别是 cmath 模块运算的是复数,math 模块运算的是数学运算。

使用math或者cmath函数必须先导入。使用import math导入math模块,使用import cmath导入cmath模块。

math模块中包含的函数

我们可以使用dir()函数显示出我们导入模块所包含的内容:

>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

其中包含的函数这里就不再详细的解释了,如果想知道某一个函数的使用方法,直接百度即可。

cmath模块中包含的函数

>>> import cmath
>>> dir(cmath)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', ...
  • 数字类型总结

整数类型(二进制(以0b或0B开头)、八进制(以0o或者0O开头)、十进制、十六进制(以0x或者0X开头)

浮点数类型 (带有小数点的数据,可以用科学计数法表示)

复数类型(与数学中的复数概念一致)

三种数据类型存在“扩展”关系(整数可以看做是浮点数的特例,浮点数可以看做复数的特例)

不同数据类型之间可以进行混合运算,最终的运算结果为最宽类型(整数宽度<浮点数<复数)宽度低的数据可以强制转换成宽度高的数据,反之则不可以。

int(x),float(x),complex(x),将x转换成相应的数据类型

可以使用函数type(),返回数据的类型,来确定数据的类型

数值类型没有很多方法或属性,主要就是看实部和虚部,不做过多总结

字符型

  • 字符型数据为夹在引号之间的字符串,如 “MR”, ‘MR’。注意一定要用英文引号。很容易因为符号中英文的问题导致程序出错。
  • 而python中的字符串主要包括数字,字母,下划线,空格。它是python编程语言中表示文本的数据类型。

Unicode 字符串

在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。

在Python3中,所有的字符串都是Unicode字符串。

输出带有引号的字符串可以使用转义字符\,例如输出"I love you",可以写为print(""I love you"")或者输入print(’ “I love you” ‘)使用单引号将要输出的字符串引起来。也可以通过转移符加反斜杠(\)来输出带有反斜杠的字符串

字符串属于序列类型,根据字符串内容的多少可以将字符串分为单行字符串和多行字符串,其中单行字符串可以由一对双引号(" “)或一对单引号(’ ‘)表示,单引号和双引号等效多行字符串可由一对三单引号(’’’ ‘’’)或一对三双引号(”"" “”")表示,三单引号和三双引号也等效。

Python三引号
python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。实例如下

实例(Python 3.0+)
#!/usr/bin/python3

para_str = """这是一个多行字符串的实例
多行字符串可以使用制表符
TAB ( \t )。
也可以使用换行符 [ \n ]。
"""
print (para_str)
以上实例执行结果为:

这是一个多行字符串的实例
多行字符串可以使用制表符
TAB (    )。
也可以使用换行符 [ 
]。

三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。

一个典型的用例是,当你需要一块HTML或者SQL时,这时用字符串组合,特殊字符串转义将会非常的繁琐。

errHTML = '''
<HTML><HEAD><TITLE>
Friends CGI Demo</TITLE></HEAD>
<BODY><H3>ERROR</H3>
<B>%s</B><P>
<FORM><INPUT TYPE=button VALUE=Back
ONCLICK="window.history.back()"></FORM>
</BODY></HTML>
'''
cursor.execute('''
CREATE TABLE users (  
login VARCHAR(8), 
uid INTEGER,
prid INTEGER)
''')

Python标准库string中定义数字字符、标点符号、英文字母、大写字母、小写字母等常量。

>>> import string
>>> string.digits
'0123456789'
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Python转义字符

在需要在字符中使用特殊字符时,python用反斜杠()转义字符。如下表:

转义字符 描述
\(在行尾时) 续行符
\\ 反斜杠符号
' 单引号
" 双引号
\a 响铃
\b 退格(Backspace)
\000
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数,yy 代表的字符,例如:\o12 代表换行,其中 o 是字母,不是数字 0。
\xyy 十六进制数,yy代表的字符,例如:\x0a代表换行
\other 其它的字符以普通格式输出

字符串之间可以通过+或者*进行连接,+将两个字符创进行连接,*构建一个由本身字符串重复连接的新字符串。

len()函数可以返回字符串的长度

字符串使用实例:输入一个月份的数字返回对应月份的名称缩写

代码如下:

months="JanFebMarAprMayJunJulAugSepOctNovDec"

n=input("请输入月份数(1-12):")

pos=(int(n)-1)*3

monthAbbrev=months[pos:pos+3]

print("月份的简写是"+monthAbbrev+".")

  原文链接:https://blog.csdn.net/qq_41575507/article/details/81873448

Python字符串运算符

操作符 描述 实例
+ 字符串连接 a + b 输出结果: HelloPython
* 重复输出字符串 a*2 输出结果:HelloHello
[] 通过索引获取字符串中字符 a[1] 输出结果 e
[ : ] 截取字符串中的一部分,遵循左闭右开原则,str[0:2] 是不包含第 3 个字符的。 a[1:4] 输出结果 ell
in 成员运算符 - 如果字符串中包含给定的字符返回 True ‘H’ in a 输出结果 True
not in 成员运算符 - 如果字符串中不包含给定的字符返回 True ‘M’ not in a 输出结果 True
r/R 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 print( r’\n’ )print( R’\n’ )
% 格式字符串 请看下一节内容。

在 Python 3.8 的版本中可以使用 = 符号来拼接运算表达式与结果:

实例
>>> x = 1
>>> print(f'{x+1}')   ## Python 3.6
2

>>> x = 1
>>> print(f'{x+1=}')   ## Python 3.8
'x+1=2'

字符串的索引

有两种索引方式,一种是从左向右索引一种是从右向左索引,两种索引字符串中的字符被赋予的相对坐标是不同的,索引格式为在字符串后跟一个[],[]里面放入索引值

从左向右:第一个字符的索引值为0,依次往后加一。即0,1,2,3··· 从右向左:最后一个字符的索引值为-1,依次往前减一。即···,-3,-2,-1

Python字符串格式化

Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。

如下实例:

print "My name is %s and weight is %d kg!" % ('Zara', 21) 

以上实例输出结果:

My name is Zara and weight is 21 kg!
python字符串格式化符号:
符号 描述
%c 格式化字符及其ASCII码
%s 格式化字符串
%d 格式化整数
%u 格式化无符号整型
%o 格式化无符号八进制数
%x 格式化无符号十六进制数
%X 格式化无符号十六进制数(大写)
%f 格式化浮点数字,可指定小数点后的精度
%e 用科学计数法格式化浮点数
%E 作用同%e,用科学计数法格式化浮点数
%g %f和%e的简写
%G %f 和 %E 的简写
%p 用十六进制数格式化变量的地址

格式化操作符辅助指令:

符号 功能
* 定义宽度或者小数点精度
- 用做左对齐
+ 在正数前面显示加号( + )
<sp> 在正数前面显示空格 在八进制数前面显示零(‘0’),在十六进制前面显示'0x’或者'0X’(取决于用的是’x’还是’X’)
0 显示的数字前面填充'0’而不是默认的空格
% ‘%%‘输出一个单一的’%’
(var) 映射变量(字典参数)
m.n. m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

f-string

f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。之前我们习惯用百分号 (%):

实例
>>> name = 'Runoob'
>>> 'Hello %s' % name
'Hello Runoob' 
f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去,实例如下:

实例
>>> name = 'Runoob'
>>> f'Hello {name}'  ## 替换变量

>>> f'{1+2}'         ## 使用表达式
'3'

>>> w = {'name': 'Runoob', 'url': 'www.runoob.com'}
>>> f'{w["name"]}: {w["url"]}'
'Runoob: www.runoob.com'

用了这种方式明显更简单了,不用再去判断使用 %s,还是 %d。

python的字符串内建函数

字符串方法是从python1.6到2.0慢慢加进来的——它们也被加到了Jython中。这些方法实现了string模块的大部分方法,如下表所示列出了目前字符串内建支持的方法,所有的方法都包含了对Unicode的支持,有一些甚至是专门用于Unicode的。

方法 描述
string.capitalize() 把字符串的第一个字符大写
string.center(width) 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
string.count(str, beg=0, end=len(string)) 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数
string.decode(encoding=‘UTF-8’, errors=‘strict’) 以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除 非 errors 指 定 的 是 ‘ignore’ 或 者’replace’
string.encode(encoding=‘UTF-8’, errors=‘strict’) 以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是’ignore’或者’replace’
string.endswith(obj, beg=0, end=len(string)) 检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False.
string.expandtabs(tabsize=8) 把字符串 string 中的 tab 符号转为空格,默认的空格数 tabsize 是 8.
string.find(str, beg=0, end=len(string)) 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
string.index(str, beg=0, end=len(string)) 跟find()方法一样,只不过如果str不在 string中会报一个异常.
string.isalnum() 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
string.isalpha() 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
string.isdecimal() 如果 string 只包含十进制数字则返回 True 否则返回 False.
string.isdigit() 如果 string 只包含数字则返回 True 否则返回 False.
string.islower() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
string.isnumeric() 如果 string 中只包含数字字符,则返回 True,否则返回 False
string.isspace() 如果 string 中只包含空格,则返回 True,否则返回 False.
string.istitle() 如果 string 是标题化的(见 title())则返回 True,否则返回 False
string.isupper() 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False
string.join(seq) Merges (concatenates)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
string.ljust(width) 返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.lower() 转换 string 中所有大写字符为小写.
string.lstrip() 截掉 string 左边的空格
string.maketrans(intab, outtab)maketrans() 方法用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。
max(str) 返回字符串 str 中最大的字母。
min(str) 返回字符串 str 中最小的字母。
string.partition(str) 有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.
string.replace(str1, str2, num=string.count(str1)) 把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.
string.rfind(str, beg=0,end=len(string) ) 类似于 find()函数,不过是从右边开始查找.
tring.rindex( str, beg=0,end=len(string)) 类似于 index(),不过是从右边开始.
string.rjust(width) 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
string.rpartition(str) 类似于 partition()函数,不过是从右边开始查找.
string.rstrip() 删除 string 字符串末尾的空格.
string.split(str="", num=string.count(str)) 以 str 为分隔符切片 string,如果 num有指定值,则仅分隔 num 个子字符串
string.splitlines(num=string.count(’\n’)) 按照行分隔,返回一个包含各行作为元素的列表,如果 num 指定则仅切片 num 个行.
string.startswith(obj, beg=0,end=len(string)) 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.
string.strip([obj]) 在 string 上执行 lstrip()和 rstrip()
string.swapcase() 翻转 string 中的大小写
string.title() 返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())
string.translate(str, del="") 根据 str 给出的表(包含 256 个字符)转换 string 的字符,要过滤掉的字符放到 del 参数中
string.upper() 转换 string 中的小写字母为大写
string.zfill(width) 返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0
string.isdecimal() isdecimal()方法检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。

来源:https://blog.csdn.net/lqh4188/article/details/50379349?utm_source=app

参考:https://www.runoob.com/python/att-string-decode.html

字符型的方法(操作)

解决英文单词大小写问题:

capitalize()函数

描述:将字符串的第一个字母变成大写,其余字母变为小写。

语法:str.capitalize()  —> str 返回字符串

程序示例:

str1 = "i Love python"
str2 = " i Love python" #字母i前有空格
str3 = "I Love python"
print(str1.capitalize())
## I love python
print(str2.capitalize())
##  i love python
print(str3.capitalize())

# 第二个示例
## I love python
str1="i "#i后面有空格
str2="love "#love后面有空格
str3="python"
str1.capitalize()+str2.capitalize()+str3.capitalize()
## 'I Love Python'
title()函数

描述:返回一个满足标题格式的字符串。即 所有英文单词 首字母大写,其余英文字母小写。

语法:str.title() -> str 返回一个字符串

程序示例:

str = "i love python"
print(str.title()) #将字符串str的所有单词首字母大写,其余字母小写
## I Love Python
swapcase()函数

描述:将字符串str中的大小写字母同时进行互换。即将字符串str中的大写字母转换为小写字母,将小写字母转换为大写字母。

语法:str.swapcase() -> str 返回字符串

程序示例:

str1 = "I Love PYTHON"
str2 = "我爱python Python pYTHON"
print(str1.swapcase()) #将字符串str1中的大写字母转为小写字母,小写字母转换为大写字母。
## i lOVE python
print(str2.swapcase())
## 我爱PYTHON pYTHON Python
lower()函数

描述:将字符串中的所有大写字母转换为小写字母。

语法:str.lower()  -> str  返回字符串

程序示例:

str1 = "I Love Python"
str2 = "Groß - α" #德语 大写α
print(str1.casefold())
## i love python
print(str1.lower())
## i love python
print(str2.casefold())
## gross - α
print(str2.lower())
## groß - α

注意 lower()函数和casefold()函数的区别:

lower() 方法只对ASCII编码,即‘A-Z’有效,对于其它语言(非英语)**中把大写转换为小写的情况无效,只能用 casefold() 函数。

#### upper()函数{#b37}

描述:将字符串中的所有小写字母转换为大写字母。

语法: str.upper() -> str  返回字符串

程序示例:

str1 = "i love python"  #全为小写字母
str2 = "I Love Python"  #所有单词首字母大写
print(str1.upper())
## I LOVE PYTHON
print(str2.upper())
## I LOVE PYTHON
casefold()函数

描述:将字符串中的所有大写字母转换为小写字母。也可以将非英文语言中的大写转换为小写。

注意 lower() 函数和 casefold() 函数的区别:lower() 方法只对ASCII编码,即‘A-Z’有效,对于其它语言中把大写转换为小写的情况无效,只能用 casefold() 函数。见lower

解决字符串填充问题

center()函数

描述:返回一个长度为width,两边用fillchar(单字符)填充的字符串,即字符串str居中,两边用fillchar填充。若字符串的长度大于width,则直接返回字符串str。

语法:str.center(width , “fillchar”)  -> str  返回字符串        注意:引号不可省

width —— 指定字符串长度。

fillchar —— 要填充的单字符,默认为空格。

程序示例:

str = "i love python"
print(str.center(20,"*")) #指定字符串长度为20 用单字符"*"填充
## ***i love python****
print(str.center(1,"*")) #指定字符串长度为1,小于原字符串的长度。
## i love python
print(str.center(20,"8"))
## 888i love python8888
print(str.center(20)) #fillchar 默认为空格
##    i love python
ljust()函数

描述:返回一个原字符串左对齐,并使用fillchar填充(默认为空格)至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。

语法: str.ljust(width, fillchar)  -> str 返回一个新的字符串

width —— 指定字符串的输出长度。

fillchar—— 将要填充的单字符,默认为空格。

程序示例:

str = "python"
print(str.ljust(30,"*")) #指定宽度为30,填充字符为*
## python************************
print(str.ljust(30))  #指定宽度为30,填充字符默认为空格
## python
print(str.ljust(30),"1") #对比
## python                         1
rjust()函数

描述:返回一个原字符串右对齐,并使用fillchar填充(默认为空格)至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。

语法: str.ljust(width, fillchar)  -> str 返回一个新的字符串

程序示例:

str = "python"
print(str.rjust(30,"*")) #指定宽度为30,填充字符为*
## ************************python
print(str.rjust(30))  #指定宽度为30,填充字符默认为空格
##                         python
print("1",str.rjust(30)) #对比
## 1                         python
zfill()函数

描述:返回指定长度的字符串,使原字符串右对齐,前面用0填充到指定字符串长度。

语法:str.zfill(width) -> str 返回一个字符串

width —— 指定字符串的长度,但不能为空。若指定长度小于字符串长度,则直接输出原字符串。

程序示例:

str = "i love python"
print(str.zfill(30)) #指定字符串长度为30
## 00000000000000000i love python
print(str.zfill(2)) #指定字符串长度为2,小于原字符串长度。
#print(str.zfill()) #参数width为空,报错.
## i love python

解决统计字符次数问题

count()函数

描述:统计字符串里某个字符出现的次数。可以选择字符串索引的起始位置和结束位置。           

语法:str.count(“char”, start,end)  或 str.count(“char”)    -> int    返回整数

str —— 为要统计的字符(可以是单字符,也可以是多字符)。 star —— 为索引字符串的起始位置,默认参数为0。 end —— 为索引字符串的结束位置,默认参数为字符串长度即len(str)。

程序示例:

str = "i love python,i am learning python"
print(str.count("i")) #star 和end 为默认参数
## 3
print(str.count("i",2)) ## star值为2,end值为默认参数
## 2
print(str.count("i",2,5)) #star值为2,end值为5
## 0
print(str.count("am"))  #多字符统计
## 1
str.count(" ")#空格
## 5

解决编码问题

encode()函数

描述:以指定的编码格式编码字符串,默认编码为 ‘utf-8’。

语法:str.encode(encoding=‘utf-8’, errors=‘strict’)     -> bytes (获得bytes类型对象)

  • encoding 参数可选,即要使用的编码,默认编码为 ‘utf-8’。字符串编码常用类型有:utf-8,gb2312,cp936,gbk等。

  • errors 参数可选,设置不同错误的处理方案。默认为 ‘strict’,意为编码错误引起一个UnicodeEncodeError。 其它可能值有 ‘ignore’, ‘replace’, ‘xmlcharrefreplace’以及通过 codecs.register_error() 注册其它的值。

程序示例:

str1 = "我爱祖国"
str2 = "I love my country"
print("utf8编码:",str1.encode(encoding="utf8",errors="strict")) #等价于print("utf8编码:",str1.encode("utf8"))
## utf8编码: b'\xe6\x88\x91\xe7\x88\xb1\xe7\xa5\x96\xe5\x9b\xbd'
print("utf8编码:",str2.encode(encoding="utf8",errors="strict"))
## utf8编码: b'I love my country'
print("gb2312编码:",str1.encode(encoding="gb2312",errors="strict"))#以gb2312编码格式对str1进行编码,获得bytes类型对象的str
## gb2312编码: b'\xce\xd2\xb0\xae\xd7\xe6\xb9\xfa'
print("gb2312编码:",str2.encode(encoding="gb2312",errors="strict"))
## gb2312编码: b'I love my country'
print("cp936编码:",str1.encode(encoding="cp936",errors="strict"))
## cp936编码: b'\xce\xd2\xb0\xae\xd7\xe6\xb9\xfa'
print("cp936编码:",str2.encode(encoding="cp936",errors="strict"))
## cp936编码: b'I love my country'
print("gbk编码:",str1.encode(encoding="gbk",errors="strict"))
## gbk编码: b'\xce\xd2\xb0\xae\xd7\xe6\xb9\xfa'
print("gbk编码:",str2.encode(encoding="gbk",errors="strict"))
## gbk编码: b'I love my country'

注:在python中encode和decode分别指编码和解码

decode()函数

描述:以 encoding 指定的编码格式解码字符串,默认编码为字符串编码。

语法:str.decode(encoding=‘utf-8’, errors=‘strict’)

encoding ——要使用的编码,如:utf-8,gb2312,cp936,gbk等。

errors ——设置不同解码错误的处理方案。默认为 ‘strict’,意为编码错误引起一个 UnicodeDecodeError。 其它可能得值有 ‘ignore’, ‘replace’以及通过 codecs.register_error() 注册的1其它值。

程序示例:

s = "我爱祖国"
str1 = s.encode(encoding="utf-8",errors="strict")
str2 = s.encode("gb2312") #编码错误的处理方案默认为"strict"
str3 = s.encode("gbk")
print(str1.decode(encoding="utf-8",errors="strict"))#用utf-8的解码格式,解码str1.
## 我爱祖国
print(str1.decode(encoding="gbk",errors="ignore"))##如果以gbk的解码格式对str1进行解码得,将无法还原原来的字符串内容
## 鎴戠埍绁栧浗
print(str1.decode(encoding="gbk",errors="strict"))
## 鎴戠埍绁栧浗
print(str1.decode(encoding="gbk",errors="replace"))
## 鎴戠埍绁栧浗
print("\n")
print(str2.decode("gb2312"))
## 我爱祖国
print(str3.decode("gbk"))
## 我爱祖国

注:在python3.x中,encode()函数只能用于字符串类型,而decode()函数只能用于字节数据类型。程序示例中 str1,str2,str3都是字节数据类型通过encode()函数把 字符串类型s 转换为字节数据类型。

expandtabs()函数

描述:返回一个字符串的副本。使原字符串中的制表符("\t")的使用空间变大。使用空格来扩展空间。

语法: str.expandtabs(tabsize=8)  —> str  返回字符串

tabsize 的默认值为8。tabsize值为0到7等效于tabsize=8。tabsize每增加1,原字符串中“\t”的空间会多加一个空格。也就是tabsize的值从0到8是不变的,8以后每增加1就会增加一个空格。

程序示例:

str = "i love\tpython"
print(str)
## i love	python
print(str.expandtabs())#默认值为8
## i love  python
print(str.expandtabs(tabsize=8))
## i love  python
print(str.expandtabs())
## i love  python
print(str.expandtabs(2)) #tabsize值为0到7,与tabsize值为8相同
## i love  python
print(str.expandtabs(tabsize=2))
## i love  python
print(str.expandtabs(tabsize=9))      
## i love   python
print(str.expandtabs(tabsize=10))
## i love    python

解决查找指定字符(子字符串)位置问题

find()函数

描述:查找字符串中指定的子字符串sub第一次出现的位置,可以规定字符串的索引查找范围。若无则返回 -1。

语法:str.find(sub,start,end) -> int 返回整数

sum —要索引的子字符串。

start —索引的起始位置。默认值为0。

end —索引的结束位置。默认值为字符串长度len(str)。

[start,end) 不包括end。

程序示例:

str = "i love python"
print(str.find("o")) #索引子字符串"o"
## 3
print(str.find("0",4))#索引起始位置为4 索引范围为:ve python
## -1
print(str.find("o",4,12))#索引起始位置为4,结束位置为12 索引范围为:ve pytho
## 11
print(str.find(""))#不加字符串,返回0
## 0
str2="jpq"
print(str2.find(""))
## 0
print(str.find(" "))#返回第一个空格出现的位置。
## 1
print(str.find("k")) #索引子字符串"k",不存在,返回-1
## -1
 rfind()函数

描述:查找字符串中指定的子字符串sub最后一次出现的位置,可以规定字符串的索引查找范围。若无则返回 -1。

语法:str.rfind(sub,start,end) -> int 返回整数

sub —要索引的子字符串。

start —索引的起始位置。默认值为0。

end —索引的结束位置。默认值为字符串长度len(str)。

[start,end) 不包括end。

注:rfind()函数用法与find()函数相似,rfind()函数返回指定子字符串最后一次出现的位置,find()函数返回指定子字符串第一次出现的位置。

程序示例:

str = "i love python python"
str.rfind("n")
## 19
str.rfind("n",0,19)#19不被包括
## 12
str.rfind("n",0,20)
## 19
print(str.rfind("o")) #默认索引整个字符串str
## 18
print(str.rfind("o",11)) #索引范围为:on python
## 18
print(str.rfind("o",0,12)) #索引范围为 i love pytho
## 11
print(str.rfind("python")) #返回最后一次出现"python"的位置,即字母"p"最后一次出现的位置。
## 14
print(str.rfind("")) #等效于返回字符串str的长度。
## 20
print(str.rfind(" "))#返回最后一个空格出现的位置
## 13
print(str.rfind("2"))  #字符串str中不存在字符"2",返回值为 -1
## -1
index()函数{#b9} 

描述:查找字符串中第一次出现的子字符串的位置,可以规定字符串的索引查找范围[star,end)。若无则会报错。注意find函数和rfind函数没有返回的是-1。

语法:str.index(sub, start, end)  -> int  返回整数

sub —— 查找的子字符串。

start —— 索引的起始位置,默认为0。

end  —— 索引的结束位置,默认为字符串的长度。

[star,end)

程序示例:

str = "i love python"
print(str.index("o"))  #默认索引整个字符串
## 3
print(str.index("o",4))  #索引 ve python
## 11
print(str.index("o",4,12)) #索引 ve pytho
## 11
print(str.index("love"))    #索引多个字符
# print(str.index("k"))    #索引字符串不存在,报错
## 2

#### rindex()函数{#b27}

描述:查找字符串中最后一次出现的子字符串的位置,可以规定字符串的索引查找范围[star,end),若无则会报错。

语法:str.rindex(sub, start, end) -> int   返回整数。

sub —— 查找的子字符串。

start —— 索引的起始位置,默认为0。

end  ——  索引的结束位置,默认为字符串的长度。

[star,end)

注:rindex()函数用法与index()函数相似,rindex()函数返回指定子字符串最后一次出现的位置,index()函数返回指定子字符串第一次出现的位置。

程序示例:

str = "i love python python"
print(str.rindex("p")) #默认索引整个字符串
## 14
print(str.rindex("o",5)) #索引的范围为:e python python
## 18
print(str.rindex("o",5,13)) #索引范围为:e python
## 11
print(str.rindex("python")) #返回最后一次出现"python"的位置,即字母"p"最后一次出现的位置。
# print(str.rindex("k"))  #索引字符串不存在,报错
## 14
len(str),str[5:13]
## (20, 'e python')

解决格式化输出问题

format()函数

描述:返回一个格式化的字符串。

语法:str.format(*args, **kwargs) ——> str 返回字符串 

“模板字符串”.format(逗号分隔的参数) 或  {参数序号:格式控制标记}.format(逗号分隔的参数) 

它是通过{}和:来代替%。

模板字符串是一个由槽(用大括号{}来表示)和字符串组成的字符串,用来控制字符串的显示效果。大括号{}对应着format()中逗号分隔的参数。

  • format()基本用法

语法:[模板字符串].format(逗号分隔的参数)    程序示例:

print("用法一:")
## 用法一:
print("一日之计在于{}".format("晨"))
## 一日之计在于晨
print("一日".format(0))# 如果没给槽,就插不进去

# 如果模板字符串有多个槽{},并且槽内没有指定的序号,则按照槽{}出现的顺序一一对应#format()函数中的不同参数
## 一日
print("用法二:")
## 用法二:
print("{}之计在于{}".format("一日","晨"))
 
# 也可以通过在槽{}中指定format()函数中参数的序号来使用,参数是从0开始编号的。
## 一日之计在于晨
print("用法三:")
## 用法三:
print("{0}之计在于{1}".format("一日","晨"))
## 一日之计在于晨
print("{1}之计在于{0}".format("晨","一日"))
 
## 如果想要在模板字符串中输出大括号("{}"),则使用{{ 来表示 {   用 }} 来表示 }
## 一日之计在于晨
print("用法四:")
## 用法四:
print("{0}说得好:{{一{1}之计在于晨 一{2}之计在于春}}".format("俗话","日","年"))
 
# 如果模板字符串中出现的槽{}和format()函数中参数个数不一致,
# 则必须要在槽{}中使用序号来指定参数的使用,否者会产生IndexError的错误。
## 俗话说得好:{一日之计在于晨 一年之计在于春}
print("用法五:")
## 用法五:
print("{0}日之计在于晨, {0}年之计在于春".format("一"))
# print("{}日之计在于晨, {}年之计在于春".format("一")) #槽中没有指定参数序号,会报错。
## 一日之计在于晨, 一年之计在于春
  • 通过关键字参数 

程序示例: 

print("{year}之计在于{season}".format(year="一年",season="春"))
## 一年之计在于春

程序示例:

l = ["一日","晨","一年","春"]#l是一个字符串列表
a = ["一日","晨"]
b = ["一年","春"]
print("{0[0]}之计在于{0[1]}, {0[2]}之计在于{0[3]}".format(l))#l整体被记为0
#format()函数中的参数可以是一个或多个列表,但要注意槽中序号的差异。
## 一日之计在于晨, 一年之计在于春
print("{0[0]}之计在于{0[1]}, {1[0]}之计在于{1[1]}".format(a,b)) 
## 一日之计在于晨, 一年之计在于春
  • 通过字典

程序示例:

d1 = {"year":"一年","season":"春"}
print(" {year}之计在于{season}".format(**d1))
##  一年之计在于春
d2 = {"time":["一日","一年"],"season":["晨","春"]}
print("{time[0]}之计在于{season[0]},{time[1]}之计在于{season[1]}".format(**d2))
## 一日之计在于晨,一年之计在于春
  • format()函数格式控制方法

语法:{参数序号:格式控制标记}.format(逗号分隔的参数)    槽中格式控制标记规则

 :   [填充] [对齐]  [宽度] [,]   [.精度] [类型]
引导符号 要填充的单个字符 < 左对齐 > 右对齐 ^ 居中对齐 设定槽的输出宽度 数字的千位分隔符 适用于整数和浮点数 用于控制浮点数小数部分的精度(长度)或字符串的最大输出长度 整数类型:b,c,d,o,x,X 浮点数类型:e,E,f,%

[填充]——只能填充单个字符。填充字符时,一定要选择对齐方式,否者会有 Invalid format specifier 的报错

[对齐]——默认对齐方式为左对齐。

[宽度]——指的是槽的输出宽度,当槽的实际宽度比槽的设定宽度大,则输出槽的实际宽度,否者按设定的宽度输出。

[类型]——解析如下表:

整数和浮点数类型的输出格式:

类型 描述 类型 描述
b 输出整数的二进制形式 e 输出浮点数对应的小写字母e的指数形式
c 输出整数对应的Unicode字符 E 输出浮点数对应的大写字母E的指数形式
d 输出整数的十进制形式 f 输出标准浮点数形式
o 输出整数的八进制形式 % 输出浮点数的百分比形式
x 输出整数的小写十六进制形式    
X 输出整数的大写写十六进制形式
   
格式控制标记规则:[填充], [对齐], [宽度], [,], [.精度], [类型]  这六个规则是可以任意组合使用的,但要按以上顺序使用。不过一般可以分为两组。

一组为:[填充] [对齐] [宽度]   主要用于规范字符串的显示格式。

程序示例:

s = "厉害了,我的国"
print("{0:30}".format(s))  #默认为左对齐,宽度为30,序号0可省
## 厉害了,我的国
print("{0:>30}".format(s))  #右对齐  
##                        厉害了,我的国
print("{0:*>30}".format(s)) #填充*字符,右对齐
## ***********************厉害了,我的国
print("{0:*^30}".format(s)) #居中对齐
## print("{0:*30}".format(s)) #填充字符时,没有选择对齐方式,会有 Invalid formatspecifier 的报错
## ***********厉害了,我的国************

格式控制标记规则也可以用变量来表示,即用槽{}来指定对应的格式控制标记规则。

程序示例:

s = "厉害了,我的国"
a = "*"
b = "^"
c = 30
d = ["<","^",">"]
print("{0:{1}{2}{3}}".format(s,a,b,c))  #居中对齐,宽度为30,填充字符为*
## ***********厉害了,我的国************
print("{0:{1}{2[2]}{3}}".format(s,a,d,c))#右对齐,用列表选择对齐方式。
## ***********************厉害了,我的国
print("{0:{1}{2[0]}{3}}".format(s,a,d,c)) 
## 厉害了,我的国***********************

另一组为:[,]  [.精度]  [类型]   主要于规范数字的输出格式和控制字符串的输出长度。

程序示例:

print("{0:,}".format(123456789)) ## 千位分隔符
## 123,456,789
print("{:,.3}".format(123456.123)) #保留3位有效数字
## 1.23e+05
print("{:.3}".format("厉害了,我的国")) ## 输出前三个字符

# 输出整数类型的格式化规则:
## 厉害了
print("输出整数的二进制形式:{0:b}\n输出整数对应的Unicode字符:{0:c}\n输出整数的十进制形式:{0:d}\n输出整数的八进制形式:{0:o}\n输出整数的小写十六进制形式:{0:x}\n输出整数的大写写十六进制形式:{0:X}".format(123456))

# 等效于一下语句:
## 输出整数的二进制形式:11110001001000000
## 输出整数对应的Unicode字符:𞉀
## 输出整数的十进制形式:123456
## 输出整数的八进制形式:361100
## 输出整数的小写十六进制形式:1e240
## 输出整数的大写写十六进制形式:1E240
print("输出整数的二进制形式: {:b}".format(123456))
## 输出整数的二进制形式: 11110001001000000
print("输出整数对应的Unicode字符: {:c}".format(123456))
## 输出整数对应的Unicode字符: 𞉀
print("输出整数的十进制形式: {:d}".format(123456))
## 输出整数的十进制形式: 123456
print("输出整数的八进制形式: {:o}".format(123456))
## 输出整数的八进制形式: 361100
print("输出整数的小写十六进制形式: {:x}".format(123456))
## 输出整数的小写十六进制形式: 1e240
print("输出整数的大写写十六进制形式: {:X}".format(123456))
  
# 输出浮点数类型的格式化规则:
## 输出整数的大写写十六进制形式: 1E240
print("输出浮点数对应的小写字母e的指数形式: {:e}".format(123456.123456))
## 输出浮点数对应的小写字母e的指数形式: 1.234561e+05
print("输出浮点数对应的大写字母E的指数形式: {:E}".format(123456.123456))
## 输出浮点数对应的大写字母E的指数形式: 1.234561E+05
print("输出标准浮点数形式: {:f}".format(123456.123456))
## 输出标准浮点数形式: 123456.123456
print("输出浮点数的百分比形式: {:%}".format(123456.123456))
 
# 对比  [.精度]可以控制小数部分的输出长度
## 输出浮点数的百分比形式: 12345612.345600%
print("输出浮点数对应的小写字母e的指数形式: {:.3e}".format(123456.123456))
## 输出浮点数对应的小写字母e的指数形式: 1.235e+05
print("输出浮点数对应的大写字母E的指数形式: {:.3E}".format(123456.123456))
## 输出浮点数对应的大写字母E的指数形式: 1.235E+05
print("输出标准浮点数形式: {:.3f}".format(123456.123456))
## 输出标准浮点数形式: 123456.123
print("输出浮点数的百分比形式: {:.3%}".format(123456.123456))
## 输出浮点数的百分比形式: 12345612.346%
  • 综合运用实例

程序示例:

print("{:*^30,.2f}".format(123456.1235))#用*字符填充,居中对齐,宽度为30,千位分隔符,保留小数点后两位,输出标准浮点数
## **********123,456.12**********
s = "一年有:"
a = 365.0000
b = "天"
print("{0:*>8}{1:,.1f}{2:*<5}".format(s,a,b))
## ****一年有:365.0天****
format_map()函数

描述:返回字符串的格式化版本。

语法:str.format_map(mapping)  -> str 返回字符串

程序示例:

student = {"name":["张三","李四"],"idcard":[1,2]} 
print("我的名字是{name[0]},我的学号是{idcard[0]}".format_map(student))
## 我的名字是张三,我的学号是1
print("我的名字是{name[0]},我的学号是{idcard[1]}".format_map(student))
  
## 我的名字是张三,我的学号是2
print(["我的名字是{},我的学号是{}".format(*x) for x in zip(student["name"],student["idcard"])]) #以列表的形式输出
## ['我的名字是张三,我的学号是1', '我的名字是李四,我的学号是2']
print("我的名字是{},我的学号是{}".format(*x) for x in zip(student["name"],student["idcard"]))
 
## <generator object <genexpr> at 0x0000018BC1EA39C8>
print(["我的名字是{},我的学号是{}".format(*x) for x in zip(*map(student.get,["name","idcard"]))]) #以列表的形式输出
## ['我的名字是张三,我的学号是1', '我的名字是李四,我的学号是2']
print("我的名字是{},我的学号是{}".format(*x) for x in zip(*map(student.get,["name","idcard"]))) 
 
## <generator object <genexpr> at 0x0000018BC1E70E48>
for i in range(len(student)):
    print("我的名字是{{name[0]}},我的学号是{{idcard[0]}}".format(i).format_map(student))
    #先用format(i)将{{}}转化为含{}的字符串,这样后面的format_map就可以插入了。
    ## {{ }} 等效于{ }  
## 我的名字是张三,我的学号是1
## 我的名字是张三,我的学号是1

解决判断问题(返回bool类型)

endswith()函数

描述:判断字符串是否以指定字符或子字符串结尾。

语法:str.endswith(“suffix”, start, end) 或 str[start,end].endswith(“suffix”), 用于判断字符串中某段字符串是否以指定字符或子字符串结尾。

suffix — 后缀,可以是单个字符,也可以是字符串,还可以是元组(“suffix"中的引号要省略,常用于判断文件类型)。

start —索引字符串的起始位置。

end — 索引字符串的结束位置。

str.endswith(suffix)  star默认为0,end默认为字符串的长度len(str)

注意:空字符的情况。返回值通常为True

程序示例:

str = "i love python"
print("1:",str.endswith("n")) 
## 1: True
print("2:",str.endswith("python"))
## 2: True
print("3:",str.endswith("n",0,6))## 索引 i love 是否以“n”结尾。
## 3: False
print("4:",str.endswith("")) #空字符
## 4: True
print("5:",str[0:6].endswith("n")) ## 只索引 i love
## 5: False
print("6:",str[0:6].endswith("e"))
## 6: True
print("7:",str[0:6].endswith(""))
## 7: True
print("8:",str.endswith(("n","z")))#遍历元组的元素,结尾是其中之一即返回True,否者返回False
## 8: True
print("9:",str.endswith(("k","m")))
  
#元组案例
## 9: False
file = "python.txt"
if file.endswith("txt"):
    print("该文件是文本文件")
elif file.endswith(("AVI","WMV","RM")):
    print("该文件为视频文件")
else:
    print("文件格式未知")
## 该文件是文本文件
startswith()函数

描述:判断字符串是否以指定字符或子字符串开头。

语法:str.endswith(“suffix”, start, end) 或 str[start,end].endswith(“suffix”) 用于判断字符串中某段字符串是否以指定字符或子字符串结尾。

suffix — 后缀,可以是单个字符,也可以是字符串,还可以是元组(“suffix"中的引号要省略)。

str.endswith(suffix)  star默认为0,end默认为字符串的长度。

注意:空字符的情况。返回值通常也为True

程序示例:

str = "hello,i love python"
print("1:",str.startswith("h"))
## 1: True
print("2:",str.startswith("l",2,10))## 索引 llo,i lo 是否以“n”结尾。
## 2: True
print("3:",str.startswith("")) #空字符
## 3: True
print("4:",str[0:6].startswith("h")) ## 只索引  hello,
## 4: True
print("5:",str[0:6].startswith("e"))
## 5: False
print("6:",str[0:6].startswith(""))
## 6: True
print("7:",str.startswith(("h","z")))#遍历元组的元素,存在即返回True,否者返回False
## 7: True
print("8:",str.startswith(("k","m")))
## 8: False
str2="a"
str2.startswith("a")
## True
str2.startswith("a",0,0)
## False
isalnum()函数

描述:检测字符串是否由字母和数字组成。

语法:str.isalnum()  -> bool  返回值为布尔类型(True,False)

str中至少有一个字符且所有字符都是字母或数字则返回 True,否则返回 False

程序示例:

str1 = "i love python 666"  #有空格,不全是字母或数字
str2 = "python" #全为字母
str3 = "123"  #全为数字
str4 = "python666"  #字母和数字的组合
print(str1.isalnum())
## False
print(str2.isalnum())
## True
print(str3.isalnum())
## True
print(str4.isalnum())
## True
isalpha()函数

描述:检测字符串是否只由字母组成。

语法:str.isalpha()  -> bool  返回值为布尔类型(True,False)

字符串中至少有一个字符且所有字符都是字母则返回 True,否则返回 False。

程序示例:

str1 = "python" #全为字母
str2 = " python" #存在空格
str3 = "123"  #全为数字
str4 = "python666"   #字母和数字的组合
print(str1.isalpha())
## True
print(str2.isalpha())
## False
print(str3.isalpha())
## False
print(str4.isalpha())
## False
isdecimal()函数

描述:检查字符串是否只包含十进制字符。该方法只存在于unicode对象中。

注意:定义一个十进制字符串,只需要在字符串前添加前缀 ‘u’ 即可。

语法: str.isdecimal()  -> bool  返回值为布尔类型(True,False)

字符串中若只包含十进制字符返回True,否则返回False。

程序示例:

str1 = u"123456" 
str2 = u"python666"
str3 = "123456"
str4 = "python666"
print(str1.isdecimal())
## True
print(str2.isdecimal())
## False
print(str3.isdecimal())
## True
print(str4.isdecimal())
## False
isdigit()函数

描述:检测字符串是否只由数字组成.

语法: str.isdigit()  -> bool  返回值为布尔类型(True,False)

字符串中至少有一个字符且所有字符都是数字则返回True,否则返回 False。

注:能判断“①”,不能判断中文数字。但 isnumeric() 函数可以。

程序示例:

str1 = "python" #全为字母
str2 = " python" #存在空格
str3 = "123"  #全为数字
str4 = "python666"   #字母和数字的组合
str5 = "一二三四五六七" #中文数字输出False
str6 = "①"  
print(str1.isdigit())
## False
print(str2.isdigit())
## False
print(str3.isdigit())
## True
print(str4.isdigit())
## False
print(str5.isdigit())
## False
print(str6.isdigit())
## True
isidentifier()函数

描述:判断str是否是有效的标识符。str为符合命名规则的变量,保留标识符则返回True,否者返回False。

语法:str.isidentifier()  -> bool  返回值为布尔类型(True,False)

程序示例:


str1 = "123"  #变量名为123
str2 = "def"  #变量名为保留字
str3 = "_123"  #变量名有下划线开头
str4 = "student"#变量名由字母开端
str5="dd d"
print(str1.isidentifier())
## False
print(str2.isidentifier())
## True
print(str3.isidentifier())
## True
print(str4.isidentifier())
## True
print(str5.isidentifier())
## False
islower()函数

描述:检测字符串中的字母是否全由小写字母组成。(字符串中可包含非字母字符)

语法:str.islower()  -> bool   返回值为布尔类型(True,False)

字符串中包含至少一个区分大小写的字符,且所有这些区分大小写的字符都是小写,则返回 True,否则返回False。

程序示例:

str1 = "i love python"  #字符串中的字母全为小写
str2 = "我爱python!"  #字符串中的字母全为小写,也存在非字母的字符
str3 = "I love python" #字符串中有大写字符
print(str1.islower())
## True
print(str2.islower())
## True
print(str3.islower())
## False
isupper()函数

描述:检测字符串中的字母是否全由大写字母组成。(字符串中可包含非字母字符)。

语法:str.isupper()  -> bool  返回值为布尔类型(True,False)

字符串中包含至少一个区分大小写的字符,且所有这些区分大小写的字符都是大写,则返回 True,否则返回 False。

程序示例:

str1 = "I LOVE PYTHON"  #全为大写字母
str2 = "i LOVE PYTHON"  #存在小写字母
str3 = "我爱PYTHON"   #存在非字母的字符
print(str1.isupper())
## True
print(str2.isupper())
## False
print(str3.isupper())
## True
isnumeric()函数

描述:测字符串是否只由数字组成。这种方法是只适用于unicode对象

注:把一个字符串定义为Unicode,只需要在字符串前添加前缀 ‘u’ 

语法:str.isnumeric()  -> bool  返回值为布尔类型(True,False)

字符串中只包含数字字符,则返回 True,否则返回 False。

与isdigit()函数类似,但isnumeric()函数可以判断中文数字,功能更强大。

程序示例:

str1 = u"123456"  #全为数字
str2 = "123456"
str3 = "python666"  #字母数字组合
str4 = "一二三四五六"  #中文数字
str5 = "①"
print(str1.isnumeric())
## True
print(str2.isnumeric())
## True
print(str3.isnumeric())
## False
print(str4.isnumeric())
## True
print(str5.isnumeric())
## True
isprintable()函数

描述:判断字符串中是否有打印后不可见的内容。如:\n ,\t  等字符。

语法:  str.isprintable()  -> bool 返回值为布尔类型(True,False)

若字符串中不存在\n ,\t 等不可见的内容,则返回True,否者返回False。

程序示例:

str1 = "i love  python"  #不存在用print()打印后不可见的内容
str2 = "i love python \n" #存在用print()打印后不可见的内容 \n
#注意比较直接输出str2和print(str2)
str2
## 'i love python \n'
print(str2)
## i love python
str3 = "i love \t python"
print(str1.isprintable())
## True
print(str2.isprintable())
## False
print(str3.isprintable())
## False
isspace()函数

描述: 检测字符串是否只由空格组成。

语法:str.isspace()  -> bool   返回值为布尔类型(True,False)

若字符串中只包含空格,则返回 True,否则返回 False。

程序示例:

str1 = "   "#空格
str2 = "i love python" 
print(str1.isspace())
## True
print(str2.isspace())
## False
print(str2[1].isspace()) #字符串str2 的第二个字符为空格
## True
istitle()函数

描述:检测判断字符串中所有单词的首字母是否为大写,且其它字母是否为小写,字符串中可以存在其它非字母的字符。

语法:str.istitle()  -> bool  返回值为布尔类型(True,False)

若字符串中所有单词的首字母为大写,且其它字母为小写,则返回 True,否则返回 False.

程序示例:

str1 = "I Love Python" #各单词的首字母均为大写,其余字母为小写
str2 = "I love python" 
str3 = "I LOVE PYTHON"
str4 = "我爱Python"  #存在其它非字母字符,
print(str1.istitle())
## True
print(str2.istitle())
## False
print(str3.istitle())
## False
print(str4.istitle())
## True

解决字符串两端

strip()函数

描述:从字符串str中去掉在其左右两边chars中列出的字符。

注:chars传入的是一个字符数组,编译器去除两端所有相应的字符,直到出现第一个在chars中不匹配的字符。详看示例。

语法: str.strip(chars)  -> str 返回一个新的字符串

chars —— 要去除的字符  默认为空格或换行符

程序示例:

str = "123456789321"
print(str.strip("123")) #除去123,对于字符串str右边,1 在 "123"中去除,2在"123"中去除,同理3也去除,但9不在"123"中,去除结束
## 456789
str1 = "my name is ymyyyy"
print(str1.strip("my"))  #"my" 无空格,字母n前的空格不去掉。
##  name is
print(str1.strip("my ")) #"my "有空格,所以str1左边字母n前的空格被去掉。
## name is
lstrip()函数

描述:从字符串str中去掉在其左边chars中列出的字符。

注:chars传入的是一个字符数组,编译器去除两端所有相应的字符,直到出现第一个在chars中不匹配的字符。详看示例。

语法:str.lstrip(chars)  -> str 返回一个新的字符串

chars —— 要去除的字符  默认为空格或换行符。

程序示例:

str1 = "bacjabck123kluabc"
print(str1.lstrip("abc"))  #只去掉左边的"bac",左边第4个字符j不在"abc"中,去除结束
## jabck123kluabc
str2 = "12578asdfgh12"
print(str2.lstrip("12")) #只去掉字符串str2左边的 12
## 578asdfgh12
rstrip()函数

描述:从字符串str中去掉在其右边chars中列出的字符。

注:chars传入的是一个字符数组,编译器去除两端所有相应的字符,直到出现第一个在chars中不匹配的字符。详看示例。

语法:str.rstrip(chars)  -> str 返回一个新的字符串

chars —— 要去除的字符  默认为空格或换行符。

程序示例:

str1 = "abcjabck123kluabcca"
print(str1.rstrip("abc"))  #只去掉右边的"abcca",右边第6个字符u不在"abc"中,去除结束
## abcjabck123klu
str2 = "12578asdfgh11112"
print(str2.rstrip("12")) #只去掉字符串str2右边的 11112
## 12578asdfgh

解决 制表 翻译 问题

maketrans()函数

描述:制作翻译表,删除表,常与translate()函数连用。 即:返回用于str.translate()函数翻译的的转换表。

语法:maketrans(x, y=None, z=None, /)  返回可用于str.translate()函数的转换表

str.maketrans(x,y,z) #返回的是Unicode映射的字典。

bytes.maketrans(x,y) #返回的是bytes类型.

bytearray.maketrans(x,y) #返回的是bytes类型。

如果只有一个参数x,它必须是一个字典且为Unicode形式的映射。

如果有两个参数x和y,它们必须是长度相等的字符串,并且在结果映射中,x中的每个字符都将映射到y中相同位置的字符(Unicode形式的映射)。

如果有三个参数x,y和z.  x和y用法同上,z为指定要删除的字符串,其结果中的字符将一一映射为:None。

bytes.maketrans(x,y) 和  bytearray.maketrans(x,y) 必须要有x和y两个参数。

注:z的长度可以和x和y不同。

  • str.maketrans(x,y,z)形式

程序示例:

s = "123456789" 
#只有参数x,且x为字典。
map1 = str.maketrans({"1":"a","2":"b","3":"c"}) 
#单字符"1" "2" "3"对应的Unicode编码值分别为:49,50,51
#制作翻译表,将 字符串s 中的单字符"1"替换为单字符"a",单字符"2"替换为单字符"b",一一对应。
print(map1,type(map1),ord("1"),ord("2"),ord("3")) #map1返回的是一个Unicode形式映射的字典
#只有参数x和参数y
## {49: 'a', 50: 'b', 51: 'c'} <class 'dict'> 49 50 51
map2 = str.maketrans("123","abc")
#单字符"1" "2" "3"对应的Unicode编码值如上,单字符"a" "b" "c"对应的Unicode编码值分别为:97,98,99
#制作翻译表,将字符串s中的单字符"1"替换为单字符"a",单字符"2"替换为单字符"b",一一对应
print(map2,type(map2),ord("a"),ord("b"),ord("c"))#map2返回的也是一个Unicode形式映射的字典 
#有x,y,z三个参数
## {49: 97, 50: 98, 51: 99} <class 'dict'> 97 98 99
map3 = str.maketrans("123","abc","56k") 
#字符串"123"和"abc"含义如上。字符串"567"为 字符串s 要删除的字符,即制作删除表。
#单字符"5" "6" "k"对应的Unicode编码值分别为:53,54,107
print(map3,type(map3),ord("5"),ord("6"),ord("k")) #map3返回的也是一个Unicode形式映射的字典

# bytes.maketrans(x,y)形式
## {49: 97, 50: 98, 51: 99, 53: None, 54: None, 107: None} <class 'dict'> 53 54 107
map4 = bytes.maketrans(b"123",b"abc")
print(type(b"123"),type(b"abc"),type(map4),map4)
## <class 'bytes'> <class 'bytes'> <class 'bytes'> b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0abc456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
map5 = bytearray.maketrans(b"123",b"abc")
print(type(b"123"),type(b"abc"),type(map5),map5)
## <class 'bytes'> <class 'bytes'> <class 'bytes'> b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0abc456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'

#### translate()函数{#b36}

描述:过滤(删除),翻译字符串。即根据maketrans()函数给出的字符映射转换表来转换字符串中的字符。

注:translate()函数是先过滤(删除),再根据maketrans()函数返回的转换表来翻译。

语法:str.translate(table)  -> str 返回一个字符串

str.translate(table)

bytes.translate(table, deletechars)

bytearray.translate(table, deletechars)

table —— 转换表,转换表是通过maketrans()函数转换而来。

deletechars —— 字符串中要过滤(删除)的字符。

程序示例:

s = "123456789abc"
s1 = b"123456789abc"
#只有参数x,且x为字典。
map1 = str.maketrans({"1":"a","2":"b","3":"c"}) 
#单字符"1" "2" "3"对应的Unicode编码值分别为:49,50,51
#制作翻译表,将 字符串s 中的单字符"1"替换为单字符"a",单字符"2"替换为单字符"b",一一对应。
print(map1,type(map1),ord("1"),ord("2"),ord("3")) #map1返回的是一个Unicode形式映射的字典
 
#只有参数x和参数y
## {49: 'a', 50: 'b', 51: 'c'} <class 'dict'> 49 50 51
map2 = str.maketrans("123","abc")
#单字符"1" "2" "3"对应的Unicode编码值如上,单字符"a" "b" "c"对应的Unicode编码值分别为:97,98,99
#制作翻译表,将字符串s中的单字符"1"替换为单字符"a",单字符"2"替换为单字符"b",一一对应
print(map2,type(map2),ord("a"),ord("b"),ord("c"))#map2返回的也是一个Unicode形式映射的字典
 
#有x,y,z三个参数
## {49: 97, 50: 98, 51: 99} <class 'dict'> 97 98 99
map3 = str.maketrans("123","abc","56k") 
#字符串"123"和"abc"含义如上。字符串"567"为 字符串s 要删除的字符,即制作删除表。
#单字符"5" "6" "k"对应的Unicode编码值分别为:53,54,107
print(map3,type(map3),ord("5"),ord("6"),ord("k")) #map3返回的也是一个Unicode形式映射的字典
 
## {49: 97, 50: 98, 51: 99, 53: None, 54: None, 107: None} <class 'dict'> 53 54 107
map4 = bytes.maketrans(b"123",b"abc")
print(type(b"123"),type(b"abc"),type(map4),map4)
 
## <class 'bytes'> <class 'bytes'> <class 'bytes'> b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0abc456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
print("\n")
 
map5 = bytearray.maketrans(b"123",b"abc")
print(type(b"123"),type(b"abc"),type(map5),map5)
 
## <class 'bytes'> <class 'bytes'> <class 'bytes'> b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0abc456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff'
print("\n\n")
 
print(s.translate(map1)) #将 字符串s 中的"123" 分别替换为 "abc"
## abc456789abc
print(s.translate(map2)) #将 字符串s 中的"123" 分别替换为 "abc"
## abc456789abc
print(s.translate(map3)) #先将 字符串s 中的字符 "5","6" ,"k"过滤(删除),再将 字符串s 中的"123" 分别翻译替换为 "abc"
## abc4789abc
print(s1.translate(map4))
## b'abc456789abc'
print(s1.translate(map5))
## b'abc456789abc'
print(s1.translate(map4,b"78b")) #先将s1中的b"78b" 过滤(删除),再将 s1 中的b"123" 分别翻译替换为 b"abc"
## b'abc4569ac'
print(s1.translate(map5,b"9"))  #先将s1中的b"9" 过滤(删除),再将 s1 中的b"123" 分别翻译替换为 b"abc"
## b'abc45678abc'

解决分割字符串问题

partition()函数

描述:根据指定的分隔符(sep)将字符串进行分割。从字符串左边开始索引分隔符sep,索引到则停止索引。

语法: str.partition(sep) -> (head, sep, tail)

返回一个三元元组,head:分隔符sep前的字符串,sep:分隔符本身,tail:分隔符sep后的字符串。

sep —— 指定的分隔符。

如果字符串包含指定的分隔符sep,则返回一个三元元组,第一个为分隔符sep左边的子字符串,第二个为分隔符sep本身,第三个为分隔符sep右边的子字符串。

如果字符串不包含指定的分隔符sep,仍然返回一个三元元组,第一个元素为字符串本身,第二第三个元素为空字符串

程序示例:

str = "https://www.baidu.com/"
print(str.partition("://")) #字符串str中存在sep"://"
## ('https', '://', 'www.baidu.com/')
print(str.partition(","))  #字符串str中不存在sep",",返回了两个空字符串。
## ('https://www.baidu.com/', '', '')
print(str.partition("."))  #字符串str中存在两个"." 但索引到www后的"."  停止索引。
## ('https://www', '.', 'baidu.com/')
print(type(str.partition("://"))) #返回的是tuple类型, 即元组类型
## <class 'tuple'>
rpartition()函数

描述:根据指定的分隔符(sep)将字符串进行分割。从字符串右边(末尾)开始索引分隔符sep,索引到则停止索引。

语法:str.rpartition(sep)  -> (head, sep, tail)

返回一个三元元组,head:分隔符sep前的字符串,sep:分隔符本身,tail:分隔符sep后的字符串。

sep —— 指定的分隔符。

如果字符串包含指定的分隔符sep,则返回一个三元元组,第一个为分隔符sep左边的子字符串,第二个为分隔符sep本身,第三个为分隔符sep右边的子字符串。

如果字符串不包含指定的分隔符sep,仍然返回一个三元元组,第一个元素为字符串本身,第二第三个元素为空字符串。

注:rpartition()函数与partition()函数用法相似,rpartition()函数从右边(末尾)开始索引,partition()函数从左边开始索引。

程序示例:

str = "https://www.baidu.com/"
print(str.rpartition("://")) #字符串str中存在sep"://"
## ('https', '://', 'www.baidu.com/')
print(str.rpartition(","))  #字符串str中不存在sep",",返回了两个空字符串。
## ('', '', 'https://www.baidu.com/')
print(str.rpartition("."))  #字符串str中存在两个"." 但索引是从右边(末尾)开始,索引到du后的"."  停止索引。
## ('https://www.baidu', '.', 'com/')
print(type(str.partition("://"))) #返回的也是tuple类型, 即元组类型
## <class 'tuple'>
split()函数

描述:拆分字符串。通过指定分隔符sep对字符串进行分割,并返回分割后的字符串列表。

语法: str.split(sep=None, maxsplit=-1)  -> list of strings  返回 字符串列表  或str.split(sep=None, maxsplit=-1)[n]  

sep —— 分隔符,默认为空格,但不能为空即(")。

maxsplit —— 最大分割参数,默认参数为-1,代表只要遇到分割符就分割。如果设为1,那么只在遇到第一个分隔符的时候分割。

[n] —— 返回列表中下标为n的元素。列表索引的用法。

程序示例:

str1 = "i love python"
str2 = "https://www.baidu.com"
str3 = "script<i love python>script"
str4 = "i \n love \n python"
print(str1.split()) #默认空格分割。
## ['i', 'love', 'python']
print(str2.split("."))#以"."为分隔符,maxsplit默认为-1
## ['https://www', 'baidu', 'com']
print(str2.split(".",-1)) #maxsplit为-1
## ['https://www', 'baidu', 'com']
print(str2.split(".",1)) #以"."为分隔符,分割一次。
## ['https://www', 'baidu.com']
print(str2.split(".")[1]) #分割后,输出列表中下标为1的元素
## baidu
print(str3.split("<")[1].split(">")[0])#循环使用
## i love python
print(str4.split("\n")) #可用于去掉字符串中的"\n" "\t"等
## ['i ', ' love ', ' python']
rsplit()函数

描述:拆分字符串。通过指定分隔符sep对字符串进行分割,并返回分割后的字符串列表,类似于split()函数,只不过 rsplit()函数是从字符串右边(末尾)开始分割。

语法: str.rsplit(sep=None, maxsplit=-1)  -> list of strings  返回 字符串列表  或str.rsplit(sep=None, maxsplit=-1)[n]  

sep —— 分隔符,默认为空格,但不能为空即(")。

maxsplit —— 最大分割参数,默认参数为-1。

[n] —— 返回列表中下标为n的元素。列表索引的用法。

程序示例:

str = "https://www.baidu.com"
print(str.rsplit()) #默认空格分割。
## ['https://www.baidu.com']
print(str.rsplit(".")) #以"."为分隔符,maxsplit默认为-1
## ['https://www', 'baidu', 'com']
print(str.rsplit(".",1)) #以"."为分隔符,分割一次。从字符串右边(末尾)开始分割。
## ['https://www.baidu', 'com']
print(str.rsplit(".",1)[1]) #分割后,输出列表中下标为1的元素
## com
splitlines()函数

描述:按照(’\n’, ‘\r’, \r\n’等)分隔,返回一个包含各行作为元素的列表,默认不包含换行符。

符号 描述
\n 换行符
\r 回车符
\r\n 回车+换行

语法:str.splitlines(keepends) -> list of strings  返回 字符串列表

keepends —— 默认参数为False ,译为 不保留换行符。参数为True , 译为 保留换行符。

程序示例:

s1 = """i
love
python
"""
s2 = "i\nlove\npython\n" #与s1等效。
s3 = "123\n456\r789\r\nabc"
print(s1.splitlines(True)) 
## ['i\n', 'love\n', 'python\n']
print(s1.splitlines()) #keepends 默认为False
## ['i', 'love', 'python']
print(s1.splitlines(False))
## ['i', 'love', 'python']
print(s2.splitlines())
## ['i', 'love', 'python']
print(s3.splitlines()) #遇到("\n"  "\r"  "\r\n"等)即分隔。
## ['123', '456', '789', 'abc']
join()函数

描述:将iterable变量的每一个元素后增加一个str字符串。

语法: str.join(iterable)  -> str  返回字符串 即:返回一个以str作为分隔符,将iterable中的各元素合并连接成一个新的字符串。str合并到iterable中每一个字符后面,可以当做新字符串的分隔符

str——分隔符。可以为空。

iterable—— 要连接的变量 ,可以是 字符串,元组,字典,列表等。

程序示例:

#对列表进行操作
l = ["1","2","3"]
print(" ".join(l)) #以空格为分隔符
## 1 2 3
print(",".join(l)) #以逗号为分隔符
 
 
#对字符串进行操作
## 1,2,3
str = "python"
print(" ".join(str)) #以空格为分隔符
## p y t h o n
print(",".join(str)) #以逗号为分隔符
 
#对字典进行操作
## p,y,t,h,o,n
d = {"a":1,"b":2,"c":3}
print(" ".join(d)) #以空格为分隔符
## a b c
print(",".join(d)) #以逗号为分隔符
 
#对元组进行操作
## a,b,c
s = ("1","2","3")
print(" ".join(s)) #以空格为分隔符
## 1 2 3
print(",".join(s)) #以逗号为分隔符
## 1,2,3

解决替换问题

replace()函数

描述:返回字符串str的副本,所有old子字符串被替换为new字符串。

语法:str.replace(old, new, count) -> str 返回字符串str的副本

old —— 将被替换的子字符串。
new —— 新子字符串,用于替换old子字符串。
count —— 替换的次数,默认全部替换。

程序示例:

s = "i love python python "
print(s.replace("o","w")) #默认字符串中的全部"o" 全部替换为"w"
## i lwve pythwn pythwn
print(s.replace("o","w",2)) #只替换掉前两个子字符串 "o"
## i lwve pythwn python
print(s.replace("python","c++"))  #子字符串可以是多个字符。
## i love c++ c++
print(s.replace("python","c++",1))
## i love c++ python

来源:https://blog.csdn.net/qq_40678222/article/details/83032178?utm_source=app 

逻辑型

  • 逻辑值

逻辑(bool)类型简介

bool表示布尔型变量,也就是逻辑型变量的定义符,以英国数学家、布尔代数的奠基人乔治·布(George Boole)命名。乔治·布尔发明了逻辑值以及逻辑值之间的运算体系。

bool仅包含真(True)/假(False)两个值,0为False,非0为True。(例如-1和2都是True),在逻辑值运算中为:非真既假。

  • 判断与真值

逻辑类型经常用来配合if/while等语句进行条件判断,如果逻辑值为真,那么控制流会做相应的操作;逻辑值为假,则会做另一种操作。

  • 逻辑运算

逻辑运算又称布尔运算。布尔用数学方法研究逻辑问题,成功地建立了逻辑演算。布尔逻辑运算符 and, or 和 not 都是 Python 关键字,这些运算符的优先级按从高到低的顺序。not 运算符拥有最高优先级,只比所有比较运算符低一级。 and 和 or 运算符则相应的再低一级。and 和 or是双目运算,由两个表达式进行运算。not是单目运算,作用于一个逻辑值的运算,而且not 要放在逻辑值的前面。

与(and)运算

and连接的值需要同时为真,计算结果才为真,否则得到的结果就为假。and具有惰性求值或逻辑短路的特点,当连接多个表达式时只需计算必须要计算的值。我们可以这样理解,就是expr1 and expr2,如果表达式expr1的值为假,那么后面的表达式expr2不会被计算到,这个表达式的内容直接为假。如果expr1为真,那么计算机会继续判断后面的expr2是否为真,如果为真,那么表达式为真。另外要注意:and并不一定会返回True或者False,而是得到最后一个计算的表达式的值

 例如我们在Python自带的shell中计算一下不同表达式的值。我们这里直接将每个表达式的结果记为True或者False。

>>> True and True
True
>>> True and False
False
>>> False and True
False
>>> False and False
False
>>> 5 and 6
6
>>> True and 5
5
>>> False and 5
False
>>> 1 and False
False
>>> True and True and False
False
>>> False and True and True and False
False

或(or)运算

or连接的值只要有一个为真,计算结果就为真,全部为假计算结果才为假。同样or也像and一样具有惰性求值或逻辑短路的特点。or也不一定会返回True或者False,而是得到最后一个计算的表达式的值

>>> True or True
True
>>> True or False
True
>>> False or True
True
>>> False or False
False
>>> 5 or 6
5
>>> False or 6
6
>>> False or True or True
True
>>> True or True or False
True
>>> False or False or False
False

非(not)运算

 not只连接一个值,非真为假,非假为真。意思是not连接一个真值,那么得到的结果就为假;连接一个假值,结果就为真。

>>> not True
False
>>> not False
True
>>> not (True and False)
True
>>> not (True or False)
False
>>> not (False or False)
True

逻辑运算符的优先级

 and or not 三个运算符的优先级上面提到过一点,具体的优先级为:

not 最高,and 次之,or 最低

在实际的编程中,我们建议使用括号来表示优先级,这样可以使我们的代码可读性更高,比如上面的not 的例子。

各种类型对应的真值

除了做条件判断得到的逻辑值,其他的数据类型也可以得到真值。

整数、浮点数和复数类型

0为“假”,所有的非0的数值都是“真”

字符串类型

空串(”")为假,所有的非空串为真

所有的序列类型(列表、元组以及上面所提到的字符串) 空序列为假,所有的非空序列为真。

空值None

表示“无意义”、“没有值”,也是假。None的值是一个空对象,空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。可以将None赋值给任何变量。如果我们将None赋值给一个对象,可以将其值置空。

>>> type(None)
<class 'NoneType'>
>>> type(0)
<class 'int'>

原文链接:https://blog.csdn.net/qq_41575507/article/details/106173149

缺失值

有些统计资料是不完整的。当一个元素或值在统计的时候是"不可得到"或"缺失值"的时候,,相关位置可能会被保留并且赋予一个特定的 nan(not availablenumber,不是一个数)值。任何 nan的运算结果都是 nan。例如,float(’nan’)就是一个实数缺失值。

类型转换

需要对数据内置的类型进行转换,只须将数据类型作为函数名即可。

以下几个内置的函数可以实现数据类型之间的转换。

这些函数返回一个新的对象,表示转换的值。下面列出几种常用的数据类型转换方式:

int(x,base)#将x转换为一个整数
float(×)#将x 转换为一个浮数点
str(x)#将对象 x 转换为字符串
chr(×)#将一个整数转换为一个字符

这里将一个整形或float型转换成一个字符或是字符串,其实是转换成了ASCII码所对应字符。你不能将一个不是整数的浮点数转换为chr型,但可以转换为str型str就是加上单引号

python的所有数据类型都是类,可以通过 type()查看该变量的数据类型。

上一页
下一页