zoukankan      html  css  js  c++  java
  • 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 指的是是否保留行分隔符
    • 行分隔符包括\n、\r\n、\r等
    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)

  • 相关阅读:
    后缀数组---Milk Patterns
    后缀数组---New Distinct Substrings
    《程序员代码面试指南》第二章 链表问题 单链表的排序
    《程序员代码面试指南》第二章 链表问题 两个单链表相交的一系列问题
    《程序员代码面试指南》第二章 链表问题 按照左右半区的方式重新组合成新链表
    《程序员代码面试指南》第二章 链表问题 合并两个有序的单链表
    《程序员代码面试指南》第二章 链表问题 向有序环形单链表中插入新节点
    《程序员代码面试指南》第二章 链表问题 搜索二叉树转换为双向链表
    《程序员代码面试指南》第二章 链表问题 在单链表中删除指定值的节点
    《程序员代码面试指南》第二章 链表问题 删除无序链表中值重复的链表
  • 原文地址:https://www.cnblogs.com/liguanzhen/p/8682893.html
Copyright © 2011-2022 走看看