zoukankan      html  css  js  c++  java
  • python-字符串

    字符串常用方法:

    1. 使用len() 函数返回字符串的字符数,返回值是字符串中的字符数(如果字符串为空,就返回0)

    2. +操作符被重载用于实现字符串链接,如果有大量字符串需要链接,使用str.join()方法是一种更好的方案,如下图:

         * 操作符提供了字符串复制功能:

    3. 从外部源接受字符串时,字符串可能包含不需要的开始空白字符与结尾空白字符。我们可以使用str.lstrip()来剥离左边的空白字符,要可以使用str.rstrip()来剥离右边的空白字符,或者使用strip()同时剥离两边的空白字符。也可以使用一个字符串作为参数来调用剥离方法。如下图

    4. str.replace()方法在字符串内进行替换。这个方法以两个字符串作为参数,并返回该字符串的副本(其中第一个字符串的错有出现都被第二字字符串所替代)。如果第二个字符串为空,那么这一函数的时间效果是删除第一个字符串中的而所有出现。

    5. 一个频繁遇到的需求是将字符串分割为一系列子字符串。比如,我们有一个文本文件,需要将其中的数据进行处理,要去每行一个记录,每个记录的字段使用星号 进行分割。为此,可以使用str.split()方法,并以待分割的字符串作为第一个参数,以要分割的最多子数据段数为可选的第二个参数。如果不再指定第二个参数,该方法就会进行尽可能多的分割。如下

          可以使用str.split()方法对出生日期与死亡日期进行进一步的分割,以便计算其寿命(给定一个年份值):

    6. 使用str.format()方法进行字符串格式化

        str.format()方法提供了非常灵活而强大的创建字符串的途径。对于简单的情况,使用str.format()方法是容易的,但是如果需要进行复制的格式化操作,就要学习该方法需要的格式化语法。

         str.format()方法会返回一个新字符串,在新字符串中,原字符串的替换字段被适当格式化后的参数所替代,例如:

         每个替换字段都是由包含在花括号中的字段名标识的。如果字段名是简单的整数,就将被作为传递给str.format()方法的一个参数的索引位置。因此,在这种情况下,名为0的字段被第一个参数所替代,名为1的字段则被第二个参数所替代。

         如果需要在格式化字符串中包含花括号,就需要将其复写,下面给出一个实例:

          如果我们试图链接字符串与数字,那么python将产生TypeError异常,但是使用str.format()方法就可以很容易地做到这一点:

            在上面的实例中,我们使用了一对字符串变量,不过在本小节的大部分,我们在str.format()方法的应用实例中都是要字符串字面值,制剂室为了方便,实际上,任何使用字符串字面值的实例中都可以使用字符串变量,方法完全是一样的。

            替换字段可以使用下面的任意一种语法格式:

      

          另外需要注意的一点是,替换字段本身也可以包含替换字段,前台的替换字段不能有任何格式,其用途主要是格式化规约的计算。在对格式化规约进行更细致的解读时,我们将展示一个实例。现在我们将逐一研究替换字段的每一个组成部分,首先从字段名开始。

        6.1 字段名

             字段名或者是一个与某个str.format()方法参数对应的整数,或者是方法的某个关键字参数的名称

            

            上面的第一个实例使用了两个关键字参数,分别是who与age,第二个实例使用了一个位置参数与一个关键字参数。要主要的是,在参数列表中,关键字cash总是在位置参数之后,当然,我们可以在格式化字符串内部以任何顺序使用任何参数。

            字段名可以使用计划数据类型,比如,列表。我们可以包含一个索引来标识特定的数据项:

             

             0 引用的事位置参数,因此,{0[1]}是列表stock参数的第二个数据项,{0[2]}是列表stock参数的第三个数据项。

             字典对象也可以使用str.format()方法,如下实例:

             

             也可以存取命名的属性。假定已经导入math 模块与sys模块,则可以进行如下操作

          

          当前还在作用范围内的局部变量可以通过内置的locals()函数访问,该函数会返回一个字典,字典的键是局部变量名,字典的值则是对变量值的引用。现在,我们可以使用映射拆分将该字典提供给str.format()方法,映射拆分操作符为 ** ,可以应用于映射(比如字典)来产生一个适合于传递给函数的键-值列表,比如:

            

          将字典拆分并提供给str.format()方法时,运行使用字典的键作为字段名。需要注意的是,如果需要将不止一个参数传递给str.format(),那么只有最后一个参数才可以使用映射拆分。

          6.2 转换

          重写数据类型的通常行为并强制提供字符串形式或表象形式也是可能的,这是通过向字段中添加conversion指定符实现的。目前,有3个这样的指定符:s ,用于强制使用字符串形式;r ,用于强制使用表象形式;a ,用于强制使用表象形式,单仅限于ASCII字符。

          

         图上第一种是表象形式;第二种是以字符串形式对decimal.Decimal进行展示的,这种形式的目标是便于阅读。

         6.3 格式规约

         整数、浮点数已经字符串的默认格式同程都足以满足要求,但是如果需要实施更精确的控制,我们就可以通过格式规约很容易地实现。

         6.3.1 对于字符串而言,我们可以控制的包括填充字符、字段内对齐方式以及字段宽度的最小值与最大值。

         字符串格式规约是使用冒号(:)引入的,其后跟随可选的字符对,一个填充字符(可以不是)与一个对齐字符(<用于左对齐,^用于中间对齐,>用于右对齐),之后跟随的是可选的最小宽度(整数),如果需要知道最多宽度,就在其后使用句点,句点后跟随一个整数值。

        要注意的是,如果我们指定了一个填充字符,就必须同时指定对齐字符。

        

        前面我们已经注意到,在格式化规约内部包括替换字段是有可能的,从而有可计算的格式也是可能的。比如,这里给出了使用maxwidth变量设置字符串最大宽度的两种方式:

        

        第一种方法使用标准的字符串分片,第二种方法使用内部替换字段。

        6.3.2 整数格式规约以冒号开始,其后可以跟随一个可选的字符对,一个填充字符(可以不是)与一个对齐字符(<用于左对齐,^用于中间对齐,>用于右对齐,=用于在符号与数字之间进行填充),之后跟随的事可选的符号字符:+表示必须输出符号,-表示只输出负数符号,空格表示为整数输出空格;为负数输出符号-。再之后跟随的事可选的最小宽度整数值,其前可以使用字符#引导,以便获取某种基数进制为前缀的输出(对二进制、八进制、十六进制数值),也可以以0引导,以便在对齐时使用0进行填充。如果希望输出的是其他进制数据,而非十进制数,就必须添加一个类型字符----------b用于表示二进制,o 用于表示八进制,x 用于表示小写十六进制,X用于表示大写十六进制,为了完整性,也可以使用d表示十进制整数。还有两个其他类型字符:c ,表示输出整数对应的Unicode字符;n ,表示以场所敏感的方式输出数字。

           我们可以以两种不同的方式用0进行填充:

           

           前两个实例使用的填充字符为0,填充位置在符号与数字本身之间(=);后两个实例要求最小宽度为12,并使用0进行填充。

           下面给出一些对齐实例:

           

          下面给出一些展示符号字符作用的实例:

           

           下面是两个使用某些类型字符的实例:

           

           为整数指定最大字段宽度是不可能的,这是因为,这样做要求数字是可裁剪的,并可能会使整数没有意义。

          6.3.3 用于浮点数的格式规约与用于整数的格式规约是一样的,只是在结尾处有两个差别。在可选的最小宽度后面,通过写一个句点并在其后跟一个整数,我们可以指定在小数点后跟随的数字个数。也可以在结尾处添加一个类型字符:e 表示使用小写字母e的指数形式,E表示使用大写字母E的指数形式,f 表示标准的浮点形式,g表示“通常”格式-----这与f 的作用相同的,除非数字特别大(在这种情况下与e的作用相同-----以及几乎与g等同的G,但总是使用f或E)。另一个可以使用的事%----这会导致数字扩大100倍,产生的数字结果使用f并附加一个%字符的格式输出。

           下面给出几个实例,展示了指数形式与标准形式:

           

          第一个实例中最小宽度为12个字符,在十进制小数点之后有2个数字。第二个实例构建在第一个实例之上,添加了一个填充字符*,由于使用了填充字符就必须同时也使用对齐字符,因此指定了右对齐方式。第三个实例构建在前两个实例之上,添加了符号操作符+,以便输出中使用符号。

           在python3.0中,decimal.Decimal数值被str.format()当做字符串,而不是数值。这需要一定的技巧来格式化其输出,从python3.1开始,decimal.Decimal数值能被格式化为floats,也能对逗号(,)提供支持,以获得用逗号进行隔离的组。在下面这个例子中,由于在python3.1中不在需要字段名,所以这里将其删除。

           

          6.3.4 复数的格式化

          通过将复数的实数部分与虚数部分分别作为单独的浮点数进行格式化来实现的,比如:

          

       

  • 相关阅读:
    hdu 1028 Ignatius and the Princess III (n的划分)
    CodeForces
    poj 3254 Corn Fields (状压DP入门)
    HYSBZ 1040 骑士 (基环外向树DP)
    PAT 1071 Speech Patterns (25)
    PAT 1077 Kuchiguse (20)
    PAT 1043 Is It a Binary Search Tree (25)
    PAT 1053 Path of Equal Weight (30)
    c++ 常用标准库
    常见数学问题
  • 原文地址:https://www.cnblogs.com/Annaying/p/7825867.html
Copyright © 2011-2022 走看看