1、字符串python
一、定義和初始化git
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中單雙引號沒有區別,只能定義單行字符串windows
三引號能定義多行字符串
api
單雙三引號是有區別的bash
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():less
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'
二、字符串轉義ide
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'
2、字符串的操做函數
一、索引操做ui
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]: ' '
二、str的鏈接和分割spa
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]: ('', '', ' ')
三、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]: ' '
四、修改
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'
五、查找
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沒有
六、判斷
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
七、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