美文网首页
《python基础教程(第三版)》第三章 使用字符串

《python基础教程(第三版)》第三章 使用字符串

作者: Colleen_oh | 来源:发表于2019-07-24 16:23 被阅读0次

    在介绍使用字符串之前,我们要记得一件事——字符串是不可变的,因此所有的元素赋值和切片赋值都是非法的。

    3.1 设置字符串格式

    3.31 替换字段名

    在最简单的情况下,只需向format提供要设置其格式的未命名参数,并在格式字符串中使用
    未命名字段。此时,将按顺序将字段和参数配对。你还可给参数指定名称,这种参数将被用于相
    应的替换字段中。你可混合使用这两种方法。

    >>> "{foo} {} {bar} {}".format(1, 2, bar=4, foo=3)
    '3 1 4 2'
    

    还可通过索引来指定要在哪个字段中使用相应的未命名参数,这样可不按顺序使用未命名参数。

    >>> "{foo} {1} {bar} {0}".format(1, 2, bar=4, foo=3)
    '3 2 4 1'
    

    你并非只能使用提供的值本身,而是可访问其组成部分(就像在常规Python代码中一样),如下所示:

    >>> fullname = ["Alfred", "Smoketoomuch"]
    >>> "Mr {name[1]}".format(name=fullname)
    'Mr Smoketoomuch'
    >>> import math
    >>> tmpl = "The {mod.__name__} module defines the value {mod.pi} for π"
    >>> tmpl.format(mod=math)
    'The math module defines the value 3.141592653589793 for π'
    

    如你所见,可使用索引,还可使用句点表示法来访问导入的模块中的方法、属性、变量和函数(看起来很怪异的变量name包含指定模块的名称)。

    3.3.2 基本转换

    >>> print("{pi!s} {pi!r} {pi!a}".format(pi="π"))
    π 'π' '\u03c0'
    

    上述三个标志(s、r和a)指定分别使用str、repr和ascii进行转换。函数str通常创建外观
    普通的字符串版本(这里没有对输入字符串做任何处理)。函数repr尝试创建给定值的Python表示(这里是一个字符串字面量)。函数ascii创建只包含ASCII字符的表示。

    你还可指定要转换的值是哪种类型,更准确地说,是要将其视为哪种类型。例如,你可能提
    供一个整数,但将其作为小数进行处理。为此可在格式说明(即冒号后面)使用字符f(表示定点数)

    >>> "The number is {num}".format(num=42)
    'The number is 42'
    >>> "The number is {num:f}".format(num=42)#作为float处理
    'The number is 42.000000'
    >>> "The number is {num:b}".format(num=42)#作为二进制处理。
    'The number is 101010'
    

    这样的类型说明符有多个,完整的清单见下表。



    还有一些字符串格式的内容,但是个人认为实用性不强,。。这里就没有写下了。

    3.2 字符串方法

    3.4.1 center

    方法center通过在两边添加填充字符(默认为空格)让字符串居中。

    >>> "The Middle by Jimmy Eat World".center(39)
    '     The Middle by Jimmy Eat World     '
    >>> "The Middle by Jimmy Eat World".center(39, "*")
    '*****The Middle by Jimmy Eat World*****'
    

    3.4.2 find

    方法find在字符串中查找子串。如果找到,就返回子串的第一个字符的索引,否则返回-1。

    >>> title = "Monty Python's Flying Circus"
    >>> title.find('Monty')
    0
    >>> title.find('Python')
    6
    >>> title.find('Zirquss')
    -1
    

    你还可指定搜索的起点和终点(它们都是可选的)。

    >>> subject.find('$$$')
    0
    >>> subject.find('$$$', 1) # 只指定了起点
    20
    >>> subject.find('!!!')
    16
    >>> subject.find('!!!', 0, 16) # 同时指定了起点和终点
    -1
    

    3.4.3 lower

    方法lower返回字符串的小写版本。

    >>> 'Trondheim Hammer Dance'.lower()
    'trondheim hammer dance'
    

    如果列表包含'Gumby',而指定的用户名为'gumby'或'GUMBY',结果同样找不到。对于这种问题,一种解决方案是在存储和搜索时,将所有的用户名都转换为小写。这样做的代码类似于下面这样:

    >>> if 'Gumby' in ['gumby', 'smith', 'jones']: print('Found it!')
    ...
    >>> name = 'Gumby'
    >>> names = ['gumby', 'smith', 'jones']
    >>> if name.lower() in names: print('Found it!')
    ...
    Found it!
    

    一个与lower相关的方法是title

    >>> "that's all folks".title()
    "That'S All Folks"
    

    3.4.4 replace

    方法replace将指定子串都替换为另一个字符串,并返回替换后的结果。

    >>> 'This is a test'.replace('is', 'eez')
    'Theez eez a test'
    

    3.4.5 split

    split是一个非常重要的字符串方法,其作用与join相反,用于将字符串拆分为序列。

    >>> '1+2+3+4+5'.split('+')
    ['1', '2', '3', '4', '5']
    >>> 'Using the default'.split()
    ['Using', 'the', 'default']
    

    如果没有指定分隔符,将默认在单个或多个连续的空白字符(空格、制表符、换行符等)处进行拆分。

    3.4.6 strip

    方法strip将字符串开头和末尾的空白(但不包括中间的空白)删除,并返回删除后的结果。

    >>> ' internal whitespace is kept '.strip()
    'internal whitespace is kept'
    

    有两个差不多功能的方法。lstrip、rstrip只删除开头或末尾的指定字符。

    3.4.7 translate

    方法translate与replace一样替换字符串的特定部分,但不同的是它只能进行单字符替换。这个方法的优势在于能够同时替换多个字符,因此效率比replace高。

    >>> table = str.maketrans('cs', 'kz')
    >>> 'this is an incredible test'.translate(table)
    'thiz iz an inkredible tezt'
    

    我们可以理解为c被k替换,s被z替换。
    调用方法maketrans时,还可提供可选的第三个参数,指定要将哪些字母删除。例如,要模仿语速极快的德国口音,可将所有的空格都删除,要删除t也可以。

    >>> table = str.maketrans('cs', 'kz', ' ')#删除空格
    >>> 'this is an incredible test'.translate(table)
    'thizizaninkredibletezt'
    >>> table = str.maketrans('cs', 'kz', 't')#删除字符t
    >>> 'this is an incredible test'.translate(table)
    'hiz iz an inkredible ez'
    

    3.4.9 判断字符串是否满足特定的条件

    很多字符串方法都以is打头,如isspace、isdigit和isupper,它们判断字符串是否具有特定的性质(如包含的字符全为空白、数字或大写)。如果字符串具备特定的性质,这些方法就返回True,否则返回False。

    相关文章

      网友评论

          本文标题:《python基础教程(第三版)》第三章 使用字符串

          本文链接:https://www.haomeiwen.com/subject/hjdjfctx.html