【Python】07、python內置數據結構之字符串


一、字符串

1、定義和初始化

In [4]: s = "hello python"
In [4]: s = "hello python"

In [5]: s
Out[5]: 'hello python'

In [6]: s = 'hello python'

In [7]: s
Out[7]: 'hello python'

In [8]: s = '''hello python'''

In [9]: s
Out[9]: 'hello python'

In [10]: s = """hello python"""

In [11]: s
Out[11]: 'hello python'

     python中單雙引號沒有區別,只能定義單行字符串

     三引號能定義多行字符串

     單雙三引號是有區別的

In [24]: s = 'hello  python
  File "<ipython-input-24-54fb5309d2d0>", line 1
    s = 'hello  python
                      ^
SyntaxError: EOL while scanning string literal


In [25]: s = 'hello  python \        # 續寫上一行
    ...: i like python'

In [26]: s
Out[26]: 'hello  python i like python'

In [22]: s = """hello python
    ...: i like python"""

In [23]: s
Out[23]: 'hello python\ni like python'


工廠函數str():

In [12]: print(str.__doc__)
str(object='') -> str
str(bytes_or_buffer[, encoding[, errors]]) -> str

Create a new string object from the given object. If encoding or
errors is specified, then the object must expose a data buffer
that will be decoded using the given encoding and error handler.
Otherwise, returns the result of object.__str__() (if defined)
or repr(object).
encoding defaults to sys.getdefaultencoding().
errors defaults to 'strict'.

In [13]: s = str("abc")

In [14]: s
Out[14]: 'abc'

In [16]: s = str([1, 2])

In [17]: s
Out[17]: '[1, 2]'

In [18]: s = str(1)

In [19]: s
Out[19]: '1'


2、字符串轉義

In [32]: s = "i like \n python"

In [33]: s
Out[33]: 'i like \n python'

In [34]: s = "i like \npython"

In [35]: s
Out[35]: 'i like \npython'

In [36]: s = 'I'm xj'
  File "<ipython-input-36-0b8827686244>", line 1
    s = 'I'm xj'
           ^
SyntaxError: invalid syntax


In [37]: s = 'I\'m xj'

In [38]: s
Out[38]: "I'm xj"


In [50]: path = 'c:\windows\nt\system32'    # 這裏的\n可能會被轉義成換行符

In [51]: path
Out[51]: 'c:\\windows\nt\\system32'

In [52]: path = 'c:\\windows\\nt\\system32'  # 一般需要這麼寫

In [53]: path
Out[53]: 'c:\\windows\\nt\\system32'

In [54]: path = r'c:\windows\nt\system32'   # 加r(raw)能表示此字符串是自然字符串,不會轉義

In [55]: path
Out[55]: 'c:\\windows\\nt\\system32'


二、字符串的操作

1、索引操作

In [59]: s = "I'm xjj"

In [60]: s[1]
Out[60]: "'"

In [61]: s[2]
Out[61]: 'm'

In [62]: s[3]
Out[62]: ' '


2、str的連接和分割

 1)str的連接

str.join()

     使用str將可迭代對象的str元素連接成1個str

     參數是元素都爲str的可迭代對象,接收者是分隔符

In [71]: print(str.join.__doc__)
S.join(iterable) -> str

Return a string which is the concatenation of the strings in the
iterable.  The separator between elements is S.

In [81]: lst = ["I", "am", "xxj"]    # 可迭代對象的元素必須是str

In [82]: ''.join(lst)
Out[82]: 'Iamxxj'

In [83]: ' '.join(lst)
Out[83]: 'I am xxj'

In [84]: ','.join(lst)
Out[84]: 'I,am,xxj'

In [85]: ',!'.join(lst)
Out[85]: 'I,!am,!xxj'

In [86]: ' , '.join(lst)
Out[86]: 'I , am , xxj'

In [87]: lst = [1, 2, 3]

In [88]: ','.join(lst)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-88-b4c772e35459> in <module>()
----> 1 ','.join(lst)

TypeError: sequence item 0: expected str instance, int found


 +

In [93]: "hello" + "python"
Out[93]: 'hellopython'

In [94]: str1 = "xxj"

In [95]: str1 + 1
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-95-2584ac008f78> in <module>()
----> 1 str1 + 1

TypeError: must be str, not int

In [96]: str1 + "hello"
Out[96]: 'xxjhello'

In [97]: str1 + " hello"
Out[97]: 'xxj hello'


 2)分割

str.split()

     不原地修改,返回使用分隔符分隔的列表

In [99]: print(s.split.__doc__)
S.split(sep=None, maxsplit=-1) -> list of strings

Return a list of the words in S, using sep as the
delimiter string.  If maxsplit is given, at most maxsplit
splits are done. If sep is not specified or is None, any
whitespace string is a separator and empty strings are
removed from the result.

In [98]: s = "I love python"

In [100]: s.split("o")              # 默認分隔所有
Out[100]: ['I l', 've pyth', 'n']

In [101]: s.split("o", 1)           # 指定分隔一次
Out[101]: ['I l', 've python']

In [102]: s.split()
Out[102]: ['I', 'love', 'python']

In [102]: s.split()                 # 默認分隔符爲1個或多個空格
Out[102]: ['I', 'love', 'python']

In [103]: s.split("ov")            # 可以使用多個字符串當空格
Out[103]: ['I l', 'e python']

In [159]: s.split("A")            # 不包含分隔符號時,不分隔原str
Out[159]: ['I love python']

In [104]: s = "I love      python"

In [105]: s.split()
Out[105]: ['I', 'love', 'python']

In [108]: s.split(" ")              # 使用一個空格當做分隔符
Out[108]: ['I', 'love', '', '', '', '', '', 'python']


In [110]: s.split(maxsplit=1)
Out[110]: ['I', 'love      python']

In [111]: s.split()
Out[111]: ['I', 'love', 'python']

str.rsplit():

      從右往左開始分隔;

      當不指定maxsplit參數時,str.rsplit()和str.split()完全一樣,當str.split()效率更高

In [122]: s = "I love python"

In [123]: s.rsplit("o")
Out[123]: ['I l', 've pyth', 'n']

In [124]: s.rsplit("o", 1)
Out[124]: ['I love pyth', 'n']

str.splitlines():

      按行分隔,返回結果可以選擇帶不帶換行符;返回值是一個列表

In [136]: print(str.splitlines.__doc__)
S.splitlines([keepends]) -> list of strings

Return a list of the lines in S, breaking at line boundaries.
Line breaks are not included in the resulting list unless keepends
is given and true.

In [137]: s = """I am xxj
     ...: i love python"""

In [138]: s
Out[138]: 'I am xxj\ni love python'

In [139]: s.splitlines()
Out[139]: ['I am xxj', 'i love python']

In [140]: s.splitlines(true)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-140-dfaf8d28775c> in <module>()
----> 1 s.splitlines(true)

NameError: name 'true' is not defined

In [141]: s.splitlines(True)
Out[141]: ['I am xxj\n', 'i love python']


str.partition():

      總是返回一個三元組,它被傳入的分隔符分隔1次,分隔成(head, sep,tail)

In [145]: print(str.partition.__doc__)
S.partition(sep) -> (head, sep, tail)

Search for the separator sep in S, and return the part before it,
the separator itself, and the part after it.  If the separator is not
found, return S and two empty strings.

In [147]: s = "I love python"

In [148]: s.partition("o")
Out[148]: ('I l', 'o', 've python')

str.rpartition()是str.partition()從右往左的版本:

In [153]: s.rpartition("o")
Out[153]: ('I love pyth', 'o', 'n')

In [154]: s.rpartition("A")
Out[154]: ('', '', 'I love python')

In [155]: "A".rpartition("A")
Out[155]: ('', 'A', '')

In [156]: "".rpartition("A")
Out[156]: ('', '', '')

In [157]: " ".rpartition("A")
Out[157]: ('', '', ' ')


3、str大小寫轉換與排版

In [2]: s = "I love python"

In [3]: s.upper()
Out[3]: 'I LOVE PYTHON'

In [5]: s.lower()
Out[5]: 'i love python'

In [6]: s.title()        # 首字母全部大寫
Out[6]: 'I Love Python'

In [8]: s.capitalize()   # 把首字母大寫
Out[8]: 'I love python'

In [10]: print(s.center.__doc__)       # 在給定寬度下居中,可以使用單個字符填充
S.center(width[, fillchar]) -> str

Return S centered in a string of length width. Padding is
done using the specified fill character (default is a space)

In [11]: s.center(50)
Out[11]: '                  I love python                   '

In [12]: s.center(50, "#")
Out[12]: '##################I love python###################'

In [13]: s.center(50, "#%")
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-13-4aa39ce1c3b3> in <module>()
----> 1 s.center(50, "#%")

TypeError: The fill character must be exactly one character long

In [19]: s
Out[19]: 'I love python'

In [20]: s.zfill(5)
Out[20]: 'I love python'

In [21]: s.zfill(50)        # 用0填充
Out[21]: '0000000000000000000000000000000000000I love python'

In [23]: print(s.casefold.__doc__)
S.casefold() -> str

Return a version of S suitable for caseless comparisons.

In [25]: s
Out[25]: 'I love python'

In [26]: s.casefold()     # 返回一個統一大小寫的str,在不同平臺有不同的表現形式
Out[26]: 'i love python'
 
In [27]: s.swapcase()     # 交換大小寫
Out[27]: 'i LOVE PYTHON'

In [36]: "\t".expandtabs()  # 默認將\t轉換爲8個空格
Out[36]: '        '

In [40]: "\t".expandtabs(8)
Out[40]: '        '

In [37]: "\t".expandtabs(3)
Out[37]: '   '


4、修改

str.replace()

      使用new str替換old str,返回新的str

In [44]: help(str.replace.__doc__)
No Python documentation found for 'S.replace(old, new[, count]) -> str\n\nReturn a copy of S with all occurrences of substring\nold replaced by new.  If the optional argument count is\ngiven, only the first count occurrences are replaced.'.
Use help() to get the interactive help utility.
Use help(str) for help on the str class.

In [47]: s
Out[47]: 'I love python'

In [48]: s.replace("love", "give up")
Out[48]: 'I give up python'

In [49]: s.replace("o", 0)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-49-184707d40696> in <module>()
----> 1 s.replace("o", 0)

TypeError: replace() argument 2 must be str, not int

In [50]: s.replace("o", "O")
Out[50]: 'I lOve pythOn'

In [51]: s.replace("o", "O", -1)
Out[51]: 'I lOve pythOn'

In [52]: s.replace("o", "O", 0)
Out[52]: 'I love python'

In [53]: s.replace("o", "O", 1)
Out[53]: 'I lOve python'

In [54]: s.replace("o", "O", 5)
Out[54]: 'I lOve pythOn'


str.strip()

str.rstrip()

str.lstrip()

      移除str首尾指定字符集合內的字符

In [62]: print(str.strip.__doc__)
S.strip([chars]) -> str

Return a copy of the string S with leading and trailing
whitespace removed.
If chars is given and not None, remove characters in chars instead.

In [66]: s = " I love python  "

In [67]: s
Out[67]: ' I love python  '

In [68]: s.strip()           # 默認去掉首尾的空白字符
Out[68]: 'I love python'

In [69]: s.lstrip()          # 去掉首部的空白字符
Out[69]: 'I love python  '

In [70]: s.rstrip()          # 去掉尾部的空白字符
Out[70]: ' I love python'

In [76]: s = "\n \r \t haha \n \r\t"

In [77]: s
Out[77]: '\n \r \t haha \n \r\t'

In [78]: s.strip()
Out[78]: 'haha'

In [84]: s = "I love python haha"

In [86]: s.strip("a")
Out[86]: 'I love python hah'

In [87]: s.strip("ha")
Out[87]: 'I love python '

In [88]: s.strip("on")
Out[88]: 'I love python haha'

In [89]: s
Out[89]: 'I love python haha'

In [91]: s = "{{ haha haha }}"

In [92]: s
Out[92]: '{{ haha haha }}'

In [94]: s.strip("{}") 
Out[94]: ' haha haha '

In [95]: s.strip("{}s")      # 移除指定字符集合裏的字符
Out[95]: ' haha haha '

In [96]: s.lstrip("{}s")
Out[96]: ' haha haha }}'


str.ljust()

str.rjust()

      左\右對其並填充

In [98]: print(str.ljust.__doc__)
S.ljust(width[, fillchar]) -> str

Return S left-justified in a Unicode string of length width. Padding is
done using the specified fill character (default is a space).


In [105]: s = "xxj"

In [106]: s.ljust(3)
Out[106]: 'xxj'

In [107]: s.ljust(1)
Out[107]: 'xxj'

In [108]: s.ljust(10)
Out[108]: 'xxj       '

In [109]: s.ljust(10, "A")
Out[109]: 'xxjAAAAAAA'

In [110]: s.ljust(10, "Ab")
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-110-b45e86b2e828> in <module>()
----> 1 s.ljust(10, "Ab")

TypeError: The fill character must be exactly one character long

In [111]: s.rjust(10, "A")
Out[111]: 'AAAAAAAxxj'


5、查找

str.index()

str.rindex()

str.find()

str.rfind()

str.count()

In [32]: print(str.find.__doc__)
S.find(sub[, start[, end]]) -> int

Return the lowest index in S where substring sub is found,
such that sub is contained within S[start:end].  Optional
arguments start and end are interpreted as in slice notation.

Return -1 on failure.

In [23]: s = "I am xxj, i love python"

In [24]: s.find("x")
Out[24]: 5

In [25]: s.find("xx")
Out[25]: 5

In [26]: s.find("o")
Out[26]: 13

In [27]: s.find("o", 13, 13)
Out[27]: -1

In [28]: s.find("o", 13, 14)
Out[28]: 13

In [29]: s.find("o", 14, 50)
Out[29]: 21

In [30]: s.find("o", 14, 21)
Out[30]: -1

In [33]: s.find("A")
Out[33]: -1

In [34]: s.find("o", -1, -15)
Out[34]: -1

In [35]: s.find("o", -15, -1)
Out[35]: 13

In [37]: s.rfind("o")
Out[37]: 21

str.index()和str.find()的區別:

       當給定的值不在查找範圍時,str.index()會拋出ValueError而str.find()返回-1

       str的count()方法和list、tuple的count()方法不一樣,也可以限制查找範圍

       str有rindex(),list、tuple沒有


6、判斷

str.startswith()

str.endswith()

       給定範圍內的str是否以給定substr開頭或結尾

In [64]: s
Out[64]: 'I am xxj, i love python'

In [66]: s.startswith("i")
Out[66]: False

In [67]: s.startswith("I")
Out[67]: True

In [68]: s.startswith("I am x")
Out[68]: True

In [69]: s.endswith("n")
Out[69]: True

In [70]: s.endswith("thon")
Out[70]: True

In [71]: s.startswith("x", 5)
Out[71]: True

In [72]: s.startswith("xxj", 5)
Out[72]: True

In [73]: s.startswith("xxj", 5, 5)
Out[73]: False

In [74]: s.startswith("xxj", 5, 7)
Out[74]: False

In [75]: s.startswith("xxj", 5, 8)
Out[75]: True


7、isxxx() 判斷類函數

       看懂方法的意思就知道用途
In [80]: s.isalnum()
Out[80]: False

In [81]: "abc123".isalnum()
Out[81]: True

In [82]: "abc123".isalpha()
Out[82]: False

In [83]: "abc".isalpha()
Out[83]: True

In [84]: "abc".isdecimal()
Out[84]: False

In [85]: "120".isdecimal()
Out[85]: True

In [86]: "120.123".isdecimal()
Out[86]: False

In [87]: "120.123".isdigit()
Out[87]: False

In [88]: "abc,".isdigit()
Out[88]: False

In [89]: ".,".isdigit()
Out[89]: False

In [90]: "120123".isdigit()
Out[90]: True

In [91]: "120123".isspace()
Out[91]: False

In [92]: "\t".isspace()
Out[92]: True


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章