zoukankan      html  css  js  c++  java
  • python数据类型-序列-字符串

    python中单引号和双引号的含义是一样的。字符串是一种直接量或者说是一种标量,是不可变类型,字符串是由独立的字符组成的,并且这些字符可以通过切片操作顺序的访问。

    python实际有三类字符串:通常意义的字符串(str)和Unicode字符串(unicode)实际上都是抽象类basestring的子类,不能实例化。

    字符串的创建:直接赋值astring='abc'或者使用str()函数bstring=str(range(4))

    访问字符串:使用方括号加一个或者多于一个索引的方式获得子串

    改变字符串:重新赋值,不能只改变一个字符或者一个子串。

    删除字符和字符串:赋一个空值astring=''或者使用del

    1.字符串操作符

    标准类型操作符:< > != == 做比较的时候是按照ASCLL值的大小来比较的。

     1 >>> str1 = 'abc'
     2 >>> str2 = 'abd'
     3 >>> str1 < str2
     4 True
     5 >>> str1 > str2
     6 False
     7 >>> str1 != str2
     8 True
     9 >>> str1 == str2
    10 False

    序列操作符切片:正向索引开始于0,结束于总长度减1;反向索引时,从-1开始,向字符串开始的方向计数,到字符串长度的负数为索引的结束。

    1 >>> astring = 'abcdefg'
    2 >>> astring[-1]
    3 'g'
    4 >>> astring[-3:-1]
    5 'ef'

    成员操作符(in, not in):用于判断一个字符或者一个子串时候出现在另一个字符串中,出现返回True,否则返回False。

    1 >>> 'bc' in 'abcd'
    2 True
    3 >>> 'n' in 'abc'
    4 False
    5 连接符(+):'abc' + 'cd' = 'abccd'
    6 >>> 'ab''cd'
    7 'abcd'

    2.内建函数

    cmp():根据字符串的ASCLL码进行比较;

    1 >>> str1
    2 'abc'
    3 >>> str2
    4 'abd'
    5 >>> cmp(str1, str2)
    6 -1

    len():返回字符串的字符数;

    1 >>> str1
    2 'abc'
    3 >>> len(str1)
    4 3

    max()/min():返回最大或者最小的字符(按照ASCLL码值排列);

    1 >>> str1
    2 'abc'
    3 >>> max(str1)
    4 'c'
    5 >>> min(str1)
    6 'a'
    7 >>>

    enumerate():同时返回循环索引和循环元素;

    1 >>> str1
    2 'abc'
    3 >>> for i, item in enumerate(str1):
    4 ... print i, item
    5 ...
    6 0 a
    7 1 b
    8 2 c

    zip():返回一个列表,其第一个元素是it0、it1…这些元素的第一个元素组成的一个元组,第二个。。。依此类推;

    1 >>> str1
    2 'abc'
    3 >>> str2
    4 'acd'
    5 >>> zip(str1, str2)
    6 [('a', 'a'), ('b', 'c'), ('c', 'd')]

    str():字符串工厂函数;

    unicode():unicode字符串工厂函数;

    chr():用一个范围在range(256)内的(0-255)整型作为参数,返回一个对应的字符;

    1 >>> chr(97)
    2 'a'

    unichr():和chr()一样,返回的是Unicode字符;

    1 >>> unichr(97)
    2 u'a'

    ord():以一个字符(长度为1的字符串)作为参数,返回对应的ASCLL数值,或者Unicode数值。

    1 >>> ord('a')
    2 97

    3.三引号

    允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。

    1 >>> hi = '''hi
    2 ... there'''
    3 >>> hi
    4 'hi
    there'
    5 >>> print hi
    6 hi
    7 there

    4.字符串不变性

    字符串是一种不可变数据类型,它的值不能被修改。想要改变一个字符串可以截取一个子串,或者在字符串的末尾连接另一个字符串等。

    1 >>> s = 'abc'
    2 >>> id(s)
    3 140717601692336
    4 >>> id(s+'def')
    5 140717486061344
    6 >>>

    5.Unicode

    处理Unicode的规则:

    程序中出现字符串时一定要加个前缀u

    不要用str()函数,用unicode()代替

    不要用过时的string模块,如果传给它的是非ASCLL字符,会把一切搞砸

    不到必须时不要在程序里面编解码Unicode字符,只在你要写入文件或数据库或者网络时,才调用encode()函数,相应的,只在你需要把数据读回来的时候才调用decode()函数

    内建的unicode()函数:接受一个string做参数,返回一个unicode字符串

    内建的decode()/encode()方法:接收一个字符串做参数返回该字符串对应的解码后/编码后的字符串

    unicode类型:用unicode()工厂方法或者直接在字符串前面加一个u来创建

    Unicode序数:内建的unichar()函数返回一个对应的unicode字符(需要一个32位的值)

    附录:字符串类型内建方法

    方法

    描述

    string.capitalize()

    把字符串的第一个字符大写

    >>> a = 'abc'

    >>> a.capitalize()

    'Abc'

    string.center(width)

    返回一个原字符串居中,并使用空格填充至长度width的新字符串,填充方式是字符串两边平均进行填充

    >>> a.center(7)

    ' abc '

    string.count(str, beg=0, end=len(string))

    返回str在string里面出现的次数,如果beg或end指定则返回指定范围内str出现的次数

    >>> a.count('bc')

    1

    string.decode(decoding='UTF-8', errors='strict')

    以decoding指定的编码格式解码string,如果出错默认报一个ValueError的异常,除非errors指定的是'ignore'或者'replace'

    string.encode(encoding='UTF-8', errors='strict')

    以encoding指定的编码格式编码string,如果出错默认报一个ValueError的异常,除非errors指定的是'ignore'或者'replace'

    string.endswith(obj, beg=0, end=len(string))

    检查字符串是否已obj结束,如果beg或者end指定则检查指定的范围内是否已obj结束,如果是,返回True,否则返回False

    string.expandtabs(tabsize=8)

    把字符串string中的tab符号转换为空格,默认的空格数tabsize是8

    string.find(str, beg=0,end=len(string))

    检测str是否包含在string中,如果beg和end指定范围,则检查是否包含在指定的范围中,如果是返回开始的索引值,否则返回-1

    string.index(str,beg=0, end=len(string))

    跟find()方法一样,只不过如果str不在string中会报一个异常

    string.isalnum()

    如果string至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False

    string.isalpha()

    如果string至少有一个字符并且所有字符都是字母则返回True,否则返回False

    string.isdecimal()

    如果string只包含十进制数字则返回True,否则返回False

    string.isdigit()

    如果string只包含数字则返回True,否则返回False

    string.islower()

    如果string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回True,否则返回False

    string.isnumeric()

    如果string中只包含数字字符,则返回True,否则返回False

    string.isspace()

    如果string中只包含空格,则返回True,否则返回False

    string.istitle()

    如果string是标题化的(见title())则返回True,否则返回False

    string.isupper()

    如果string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的字符)都为大写,则返回True,否则返回False

    string.join(seq)

    以string作为分隔符,将seq中的所有的元素(字符串表示)合并为一个新的字符串

    >>> b = ' '

    >>> b.join(['he', 'she', 'it'])

    'he she it'

    string.ljust(width)

    返回一个原字符串左对齐,并使用空格填充至长度width的新字符串

    string.lower()

    转换string中所有大写字符为小写

    string.lstrip()

    裁掉string左边的空格

    string.partition(str)

    有点像find()和spit()的结合体,从str出现的第一个位置起,把字符串string分成一个3元组(string_pre, str, string_post_str),如果string中不包含str,则string_pre_str = string

    string.replace(str1, str2, num=string.count(str1))

    把string中的str1替换成str2,如果num指定,则替换不超过num次

    string.rfind(str, beg=0, end=len(string))

    类似于find()函数,不过从右边开始查找

    string.rindex(str, beg=0, end=len(string))

    类似于index(),不过是从右边开始查找

    string.rjust(width)

    返回一个原字符串右对齐,并使用空格填充至长度width的新字符串

    string.rpartition(str)

    类似于partition()函数,不过是从右边开始查找

    string.rstrip()

    删除string字符串末尾的空格

    string.split(str="",num=string.count(str))

    以str为间隔符切片string,如果num有指定值,则仅分割num个子字符串

    string.splitlines(num=string.count(" "))

    按照行间隔,返回一个包含各行作为元素的列表,如果num指定则仅切片num行

    string.startwidth(obj, beg=0, end=len(string))

    检查字符串是否以obj开头,是则返回True,否则返回False,若果beg和end指定值,则在指定范围内检查

    string.strip([obj])

    在string上执行lstrip()和rstrip()

    string.swapcase()

    翻转string中的大小写

    string.title()

    返回标题化的string,就是说所有单词都是以大写开始,其余字母均为小写(详见title())

    string.translate(str, del="")

    根据str给出的表(包含256个字符)转换string的字符,要过滤掉的字符被放到del参数中

    string.upper()

    转换string中的小写字母为大写

    string.zfill(width)

    返回长度为width的字符串,原字符串string右对齐,前面填充0

     1 >>> quest = 'what is your favorite color?'
     2 >>> quest.capitalize()
     3 'What is your favorite color?'
     4 >>> quest.center(40)
     5 ' what is your favorite color? '
     6 >>> quest.count('or')
     7 2
     8 >>> quest.endswith('color?')
     9 True
    10 >>> quest.find('or', 30)
    11 -1
    12 >>> quest.find('or', 22)
    13 25
    14 >>> quest.find('or', 10)
    15 16
    16 >>> ':'.join(quest.split())
    17 'what:is:your:favorite:color?'
    18 >>> quest.replace('favorite color', 'quest')
    19 'what is your quest?'
    20 >>> quest.upper()
    21 'WHAT IS YOUR FAVORITE COLOR?'
    22 >>>
  • 相关阅读:
    查找1
    动态规划
    分治
    [LeetCode] 1339. Maximum Product of Splitted Binary Tree
    [LeetCode] 1509. Minimum Difference Between Largest and Smallest Value in Three Moves
    [LeetCode] 233. Number of Digit One
    [LeetCode] 1963. Minimum Number of Swaps to Make the String Balanced
    [LeetCode] 1053. Previous Permutation With One Swap
    [LeetCode] 1962. Remove Stones to Minimize the Total
    [LeetCode] 1961. Check If String Is a Prefix of Array
  • 原文地址:https://www.cnblogs.com/mrlayfolk/p/11973788.html
Copyright © 2011-2022 走看看