Python数据结构之字符串

  • 一个个字符组成的有序的序列,是字符的集合
  • 使用单引号、双引号、三引号引住的字符序列
  • 字符串是不可变对象
  • Python3起,字符串就是Unicode类型

字符串元素访问——下标

  • 字符串支持使用索引访问
  • 有序的字符集合,字符序列
  • 可迭代

字符串连接

join连接

"string".join(iterable) -> str

  • 将可迭代对象连接起来,使用string作为分隔符
  • 可迭代对象本身元素都是字符串
  • 返回一个新字符串
字符串+连接

+ -> str

  • 将2个字符串连接在一起
  • 返回一个新字符串

字符串分割

split系

将字符串按照分隔符分割成若干字符串,并返回列表
split(sep=None, maxsplit=-1) -> list of strings

  • 从左至右
  • sep 指定分割字符串,缺省的情况下空白字符串作为分隔符
  • maxsplit 指定分割的次数,-1 表示遍历整个字符串

rsplit(sep=None, maxsplit=-1) -> list of strings

  • 从右向左
  • sep 指定分割字符串,缺省的情况下空白字符串作为分隔符
  • maxsplit 指定分割的次数,-1 表示遍历整个字符串

splitlines([keepends]) -> list of strings

  • 按照行来切分字符串
  • keepends 指的是是否保留行分隔符
  • 行分隔符包括 、 、 等
partition系

将字符串按照分隔符分割成2段,返回这2段和分隔符的元组
partition(sep) -> (head, sep, tail)

  • 从左至右,遇到分隔符就把字符串分割成两部分,返回头、分隔符、尾三部分的三元组;如果没有找到分隔符,就返回头、2个空元素的三元组
  • sep 分割字符串,必须指定

rpartition(sep) -> (head, sep, tail)

  • 从右至左,遇到分隔符就把字符串分割成两部分,返回头、分隔符、尾三部分的三元组;如果没有找到分隔符,就返回2个空元素和尾的三元组

字符串大小写

upper() 全大写
lower() 全小写

大小写,做判断的时候用

swapcase() 交互大小写

字符串排版

title() -> str 标题的每个单词都大写
capitalize() -> str 首个单词大写
center(width[, fillchar]) -> str
  • width 打印宽度
  • fillchar 填充的字符
zfill(width) -> str width 打印宽度,居右,左边用0填充
ljust(width[, fillchar]) -> str 左对齐
rjust(width[, fillchar]) -> str 右对齐

字符串修改

replace(old, new[, count]) -> str

  • 字符串中找到匹配替换为新子串,返回新字符串
  • count表示替换几次,不指定就是全部替换
  • 字符串的replace方法从左到右,不会回头

strip([chars]) -> str

  • 从字符串两端去除指定的字符集chars中的所有字符
  • 如果chars没有指定,去除两端的空白字符
lstrip([chars]) -> str 从左开始
rstrip([chars]) -> str 从右开始

字符串查找

find(sub[, start[, end]]) -> int

在指定的区间[start, end),从左至右,查找子串sub。找到返回索引,没找到返回-1

rfind(sub[, start[, end]]) -> int

在指定的区间[start, end),从右至左,查找子串sub。找到返回索引,没找到返回-1

index(sub[, start[, end]]) -> int
在指定的区间[start, end),从左至右,查找子串sub。找到返回索引,没找到抛出异常ValueError

rindex(sub[, start[, end]]) -> int

在指定的区间[start, end),从左至右,查找子串sub。找到返回索引,没找到抛出异常ValueError

时间复杂度

  • index和count方法都是O(n)
  • 随着列表数据规模的增大,而效率下降

len(string)

返回字符串的长度,即字符的个数

count(sub[, start[, end]]) -> int

在指定的区间[start, end),从左至右,统计子串sub出现的次数

字符串判断

endswith(suffix[, start[, end]]) -> bool

在指定的区间[start, end),字符串是否是suffix结尾

startswith(prefix[, start[, end]]) -> bool

在指定的区间[start, end),字符串是否是prefix开头

is系列 -> bool
isalnum() 是否是字母和数字组成
isalpha() 是否是字母
isdecimal() 是否只包含十进制数字
isdigit() 是否全部数字(0~9)
isidentifier() 是不是字母和下划线开头,其他都是字母、数字、下划线
islower() 是否都是小写
isupper() 是否全部大写
isspace() 是否只包含空白字符

字符串格式化

字符串的格式化是一种拼接字符串输出样式的手段,更灵活方便

  • join拼接只能使用分隔符,且要求被拼接的是可迭代对象
  • + 拼接字符串还算方便,但是非字符串需要先转换为字符串才能拼接

在2.5版本之前,只能使用printf style风格的print输出

  • printf-style formatting,来自于C语言的printf函数
  • 格式要求

    * 占位符:使用%和格式字符组成,例如%s、%d等

      > s调用str(),r会调用repr()。所有对象都可以被这两个转换。

    * 占位符中还可以插入修饰字符,例如%03d表示打印3个位置,不够前面补零

    * format % values,格式字符串和被格式的值之间使用%分隔

    * values只能是一个对象,或是一个和格式字符串占位符数目相等的元组,或一个字典

printf-style formatting 举例:

"I am %03d" % (20,)

'I like %s.' % 'Python'

'%3.2f%% , 0x%x, 0X%02X' % (89.7654, 10, 15)

"I am %-5d" % (20,)

format函数格式字符串语法——Python鼓励使用

  • "{} {xxx}".format(*args, **kwargs) -> str
  • args是位置参数,是一个元组
  • kwargs是关键字参数,是一个字典
  • 花括号表示占位符
  • {}表示按照顺序匹配位置参数,{n}表示取位置参数索引为n的值
  • {xxx}表示在关键字参数中搜索名称一致的
  • {{}} 表示打印花括号
位置参数

"{}:{}".format('192.168.1.100',8888),这就是按照位置顺序用位置参数替换前面的格式字符串的占位符中

关键字参数或命名参数

"{server} {1}:{0}".format(8888, '192.168.1.100', server='Web Server Info : ') ,位置参数按照序号匹配,关键字参数按照名词匹配

访问元素

"{0[0]}.{0[1]}".format(('magedu','com'))

对象属性访问

from collections import namedtuple

Point = namedtuple('Point','x y')

p = Point(4,5)

"{{{0.x},{0.y}}}".format(p)

对齐

'{0}*{1}={2:<2}'.format(3,2,2*3)

'{0}*{1}={2:<02}'.format(3,2,2*3)

'{0}*{1}={2:>02}'.format(3,2,2*3)

'{:^30}'.format('centered')

'{:*^30}'.format('centered')

进制

"int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}".format(42)

"int: {0:d}; hex: {0:#x}; oct: {0:#o}; bin: {0:#b}".format(42)

octets = [192, 168, 0, 1]

'{:02X}{:02X}{:02X}{:02X}'.format(*octets)

原文地址:https://www.cnblogs.com/juneman/p/8682893.html