10.Python【序列】- 字符串(下)

简介: 10.Python【序列】- 字符串

10.Python【序列】- 字符串(上):https://developer.aliyun.com/article/1528743

4.5 替换字符串

字符串是不可变序列,所有的修改都会创建新的字符串

使用replace()替换,返回字符串的副本,其中出现的所有子字符串old都将被替换为new,如果给出了可选参数count,则只替换count次出现。

str.replace(old,new[,count])

str1 = 'www.mysite.cn'
print(str1.repalce('mysite','mysql')) # www.mysql.cn

使用expandtabs()替换,返回字符串的副本,其中所有的制表符会由一个或多个空格替换,具体取决于当前列位置和给定的制表符宽度。每个tabsize 个字符设为一个制表位,默认值8设定的制表位在列0、8、16…。

str.expandtabs(tabsize=8)

print(len('1\t'.expandtabs(8))) # 输出 8,1后面添加了7个空格
print(len('1\t1'.expandtabs(8))) # 输出 9,1后面添加了7个空格
print(len('1\t'.expandtabs(8))) # 输出 8,1后面添加了7个空格
print(len('123456781\t1'.expandtabs(8))) # 输出 16,1后面添加了7个空格

使用maketrans(),返回一个可供translate()使用的转换对照表,进一步使用translate(),返回原字符串的副本,其中每个字符按给定的转换表进行映射。

str.maketrans(intab,outtab[,delchars])
bytes.maketrans(intab,outtab)
bytearray.maketrans(intab,outtab)

str.translate(table)
bytes.translate(table[,delete])
bytearray.translate(table[,delete])

a = b"ABCDEFGHIJKLMNOPORSTUVWXYZ" # 大写字节型字符集
b = b"abcdefghijklmnopqrstuvwxyz" # 小写字节型字符集
d = b"THON" # 删除字节型字符集
t1 = bytes.maketrans(a,b) # 创建字节型字符映射转换表
s = b"PYTHON" # 原始字节串
s = s.translate(None, d) # 若table 参数为 None,则只删除不映射
s = s.translate(t1) # 执行映射转换
print(s) # 输出为 b'py'

4.6 裁切字符串

使用strip(),返回原字符串的副本,移除其中的前导和末尾字符;chars 参数为指定要移除字符的字符串,如果省略或为None,chars 参数默认移除空格符。lstrip() 返回原字符串副本,移除其中的前导字符。rstrip() 返回原字符串副本,移除其中的末尾字符。

str.strip([chars])
str.lstrip([chars])
str.rstrip([chars])

print('www.example.com'.strip('cmowz.'))
print('  www.example.com  '.strip()) # 'www.example.com'
print('  www.example.com  '.lstrip()) # 'www.example.com  '
print('  www.example.com  '.rstrip()) # '  www.example.com'

4.7 转换大小写格式

可以使用以下三种方法检测字符串的大小写格式:

  • islower():检测字符串是否为纯小写的格式。
  • isupper():检测字符串是否为纯大写的格式。
  • istitle():检测字符串是否为“标题化“格式。

字符串大小写格式转换有6种方法:

  • lower():返回原字符串的副本,其中所有区分大小写的字符均转换为小写。
  • upper():返回原字符串的副本,其中所有区分大小写的字符均转换为大写。
  • title():返回原字符串的标题副本,每个单词第一个字母为大写,其余字母为小写。
  • capitalize():返回原字符串的副本,其首个字符大写,其余为小写。
  • swapcase():返回原字符串的副本,其中大写字符转换为小写,反之亦然。
  • casefold():返回原字符串消除大小写的副本。
print('Python'.islower()) # False
print('Python'.isupper()) # False
print('Python'.istitle()) # True
print('Python'.lower()) # python
print('Python'.upper()) # PYTHON
print('HELLO PYTHON'.title()) # Hello Python
print('HELLO PYTHON'.capitalize()) # Hello python
print('HELLO PYTHON'.swapcase())# hello python
print('HELLO PYTHON'.casefold())# hello python

4.8 检测字符串类型

检测数字、字母和特殊字符:

  • isascii():如果字符串为空或所有字符都是ASCII,返回True,否则False。ASCII范围是U+0000~U+007F。
  • isdecimal():如果字符串中的所有字符都是十进制字符,且该字符串至少有一个字符,则返回True,否则False。十进制字符指可以用来组成十进制数的字符,如U+0660,即数字0。
  • isdigit():如果字符串中所有字符都是数字,并且至少有一个字符,返回True,否则False。数字包括十进制字符和需要特殊处理的数字,如上标数字、Kharosti数等,即具有 Numerie_Type=Dight 或Numeric_Type=Decimal 特性的字符。
  • isnumeric():如果字符串中至少有一个字符,且所有字符均为数值字符,则返回True,否则False。数值字符就是具有Numerie_Type=Digit、Numerie_Type=Decimal 或Numeric_Type=Numeric特性的字符。
  • isalpha():如果字符串中的所有字符都是字母,并且至少有一个字符,则返回True,否则False。字母字符是指在Unicode字符数据库中定义的Letter的字符。
  • isalnum():如果字符串中的所有字符都是字母或数字,且至少有一个字符,则返回True,否则False。如果c.isalpha()、c.isdecimal()、c.isdigit()或c.isnumeric()之中有一个返回True,则字符c是字母或数字。
  • isspace():如果字符串中只有空白字符,且至少有一个字符则返回True,否则返回False。
  • isprintable():如果字符串中所有字符均可打印或字符串为空,则返回True,否则False。
  • isidentifier():如果字符串是有效标识符,返回True,否则返回False。

isdigit()isdecimal()isnumeric()方法都是用来检测数字,但是也有差异:

  • isdigit()
    True:Unicode数字、全角数字(双字节)、bytes数字(单字节)。
    False:汉字数字、罗马数字、小数。
    Error:无
  • isdecimal()
  • True:Unicode数字、全角数字(双字节)。
    False:汉字数字、罗马数字、小数。
    Error:byte数字(单字节)。
  • isnumeric()

True:Unicode数字、全角数字(双字节)、汉字数字

False:罗马数字、小数。

Error:byte数字(单字节)。

罗马数字:I、II、III、IV、V、VI、VII、VIII、IX、X等;

汉字数字:一、二、三、四、五、六、七、八、九、十、百、千、万、亿、兆、零、壹等。

4.9 填充字符串

  • str.center(width[,filcher]):返回长度为width的字符串,居中显示。使用指定的fillchar填充两边的空位,默认使用ASCII空格符。如果width小于等于len(s),则返回原字符串的副本。
  • str.ljust(width[,filcher]):返回长度为width的字符串,靠左对齐。使用指定的fillchar填充两边的空位,默认使用ASCII空格符。如果width小于等于len(s),则返回原字符串的副本。
  • str.rjust(width[,filcher]):返回长度为width的字符串,靠右对齐。使用指定的fillchar填充两边的空位,默认使用ASCII空格符。如果width小于等于len(s),则返回原字符串的副本。
  • str.zfill(width):返回原字符串的副本,在左边填充ASCII格式的‘0’,使其长度变为width。正负值前缀(‘+’/‘-’)的处理方式是在正负符号之后填充而非在之前。如果width小于等于len(s),则返回原字符串的副本。
s1 = "Python"
print(s1.center(20,"_")) # _______Python_______
print(s1.ljust(20,"_")) # Python______________
print(s1.rjust(20,"_")) # ______________Python

4.10 检索字符串

  • str.count(sub[,start[,end]]):返回子字符串sub在[start,end]范围内非重叠出现的次数。可选参数start和end被解读为切片表示法,默认值为0和字符串的长度len(str)。
  • str.endswith(suffix[,start[,end]]):如果字符串以指定suffix结束,则返回True,否则False。suffix也可以为由多个供查找的后缀构成的元组。如果有可选项start,将从指定位置开始检查,如果有end,将指定位置停止比较。
  • str.startswith(prefix[,start[,end]]):如果字符串以指定prefix开始,则返回True,否则False。preffix也可以为由多个供查找的前缀构成的元组。如果有可选项start,将从指定位置开始检查,如果有end,将指定位置停止比较。
  • str.find(sub[,start[,end]]):返回子字符串sub在str[start:end] 切片内被找到的最小索引。如果sub未被找到则返回-1。
  • str.rfind(sub[,start[,end]]):返回子字符串sub在字符串内被找到的最大(最右)索引。如果sub未被找到则返回-1。
  • str.index(sub[,start[,end]]):类似find(),当找不到sub时引发ValueError异常。
  • str.rindex(sub[,start[,end]]):类似rfind(),当找不到sub时引发ValueError异常。
str ="海水朝朝朝朝朝朝朝落,浮云长长长长长长长消"
print(str.count"长", 11,21)) # 输出为 7
# 检测字符串“海”是否在字符串的开头或结尾 
print(str.startswith("海")) # True
print(str.endswith("海")) # False
# 检素“长”在字符串中的索引位置。
prin(str. find("长") # 在整个字符串中检素,输出为 13
pprint(str. find(”长",14)) # 从下标 14 位置开始检素,输出为 14
print str. Find("长",10,13) # 在下标 10~13 内检素,输出为 -1,没有找到
print(str.rfind("长")) # 在整个字符串中检素,输出为 19
prinu(str.rfind("长",14)) # 从下标 14位留开始检索,输出为 19

5. 格式化样式

5.1 printf 风格字符串

format % values

其中,format 为一个字符串,在format 中的%转换标记符将被替换为零个或多个 values 条目。


如果 format 要求一个单独参数,则values 可以为一个非元组对象;否则,values 必须是一个包含项数与格式字符串中指定的转换符项数相同的元组,或者是一个单独映射对象,如字典。

转换标记符包含两个或更多个字符,并具有以下组成,且必须遵循下面的先后顺序。

%:用于标记转换符的起始。

映射键(可选):由加圆括号的字符序列组成,如(keywordname)。

最小字段宽度(可选):如果指定为*(星号),则实际宽度从 values 元组的下一元素中读取,要转换的对象则为最小字段宽度和可选的精度之后的元素。

精度(可选)。在 .(点号)之后加精度值的形式给出。如果指定为*(星号),则实际精度从 values元组的下一元素中读取,要转换的对象则为精度之后的元素。

长度修饰符 (可选):包括h、1或L,在Python 中可以被忽略。如%1d 等价于%d。

当右边的values 参数为一个字典或其他映射类型时,宇符串中的格式必须包舍加圆括号的映射键,对应%字符之后字典中的每一项。映射键将从映射中选取要格式化的值。例如:

print('%(language)s%(number)02d'%{'language':'Python','number':3}) # Python03
 

格式化输出字符串和整数

str1 = "%.length = %d" % (Python', len(Python'))
print(str1) # 输出为 Python.length =6

格式化输出不同进制数

n = 1000
print("Hex = %x Dec = %d Oct = %o" % (n, n, n)) 
# 输出为 Hex -3c8 Dec = 1000 Oct = 1750

格式化输出浮点数

pi = 3.141592653
print('pi1 = %10.3f' % pi) # pi1 =      3.142
print('pi2 = %.*f' % (3, pi)) # pi2 = 3.142
print('pi3 = %010.3f' % pi) # pi3 = 000003.142
print('pi4 = %-10.3f' % pi) # pi4 = 3.142    
print('pi5 = %+f' % pi) # pi5 = +3.141593

5.2 format 格式化

str.format()通过{}操作符和:辅助指令代替%操作符。

print('{0} (1}'.format('Python', 3.0)) # 输出为 Python 3.0
print('{}{}'format('Python', 3.0)) # 输出为 Python 3.0
print('{1} {0} {1)'.format('Python', 3.0)) # 输出为 3.0 Python 3.0

在字符串中使用台作为格式化操作符。与%操作符不同的是,{}操作符可以通过包含的位置值自定义引用值的位置,也可以重复引用。

print('{name};年龄是{age}岁。'.format(age=18, name='张三')) # 张三年龄是18岁。
l = ['张三',18]
print('{l[0]}年龄是{l[1]}岁。'.format(1))

# 填充与对齐
print('{:>8}'.format('1')# 右边对齐,默认空格填充,总宽度8
print('{:0>8}'.format('1') # 右对齐,0填充,总宽度8
print('{:a<8}'.format('1') # 左对齐,a填充,总宽度8
# 精度与类型f
print('{:2f}'.format(3.1415926))# 输出为 3.14
# 不同进制数字
n = 100
print('{:b}'.format(n)) # 1100100
print('{:d}'.format(n)) # 100
print('{:o}'.format(n)) # 144
print('{:x}'.format(n)) # 64
# 千位分隔符
print('{:,}' format(1234567890)) # 1,234,567,890

5.3 f-strings

在字符串前加上f修饰符,字符串中使用{}包括:表达式;

name = "Python" # 字符串
ver = 3.6 # 浮点数
print( f"{name}-{ver}、{ver+0.1}、{ver+0.2}") # Python-3.6、3.7、3.8000000000000003

注意:特殊格式化修饰符通过冒号与前面的表达式相连,1f表示仅显示1位小数。

相关文章
|
11天前
|
Python
使用Python处理字符串。
使用Python处理字符串。
|
11天前
|
算法框架/工具 索引 Python
Python基础教程(第3版)中文版 第三章 使用字符串(笔记)
Python基础教程(第3版)中文版 第三章 使用字符串(笔记)
|
9天前
|
机器学习/深度学习 调度 Python
SOFTS: 时间序列预测的最新模型以及Python使用示例
这是2024年4月《SOFTS: Efficient Multivariate Time Series Forecasting with Series-Core Fusion》中提出的新模型,采用集中策略来学习不同序列之间的交互,从而在多变量预测任务中获得最先进的性能。
32 4
|
5天前
|
Python
在Python中,`range()`函数生成一个整数序列,用于循环迭代。
【6月更文挑战第19天】`Python`的`range()`函数生成整数序列,用于迭代。它接受`start`(默认0)、`stop`(不包含,右开)和`step`(默认1)参数。在`for`循环中,`range(5)`会输出0到4。若要包含结束值,需将`stop`设为`end+1`,如`range(1, 6)`将输出1到5。
18 1
|
9天前
|
存储 索引 Python
【Python列表解锁】:掌握序列精髓,驾驭动态数据集合
【Python列表解锁】:掌握序列精髓,驾驭动态数据集合
|
9天前
|
Python 索引
【Python字符串攻略】:玩转文字,编织程序的叙事艺术
【Python字符串攻略】:玩转文字,编织程序的叙事艺术
|
9天前
|
Python
刷题——Python篇(3)字符串
刷题——Python篇(3)字符串
|
11天前
|
Python
Python使用正则表达式分割字符串
在Python中,你可以使用re模块的split()函数来根据正则表达式分割字符串。这个函数的工作原理类似于Python内置的str.split()方法,但它允许你使用正则表达式作为分隔符。
|
19天前
|
Python
Python中字符串和数字相加
【6月更文挑战第3天】
32 3
|
19天前
|
Python
【Python 训练营】N_13 遍历字符串
【Python 训练营】N_13 遍历字符串
13 2