首页 > 代码库 > python 数据结构 - 字符串
python 数据结构 - 字符串
字符串是 Python 中最常用的数据类型。我们可以使用单引号 ( ‘‘ ) 或双引号 ( " " ) 来创建字符串。
在python中,创建变量不需要指定类型,你在创建变量赋值时,python解释器会自动推断变量的数据类型
1 >>> s = ‘abcde‘ 2 >>> type(s) 3 <class ‘str‘> #这里把多种数据类型的值赋值给s,python都能自动识别 4 >>> s = 123 5 >>> type(s) 6 <class ‘int‘> 7 >>> s = [1,2,‘a‘,3] 8 >>> type(s) 9 <class ‘list‘> 10 >>> s = {‘name‘:‘root‘} 11 >>> type(s) 12 <class ‘dict‘> 13 >>> s = {1,3,‘a‘,‘abd‘} 14 >>> type(s) 15 <class ‘set‘> 16 >>>
在python中,不支持单字符类型,python中的单字符也是作为字符串来处理
在python中,因为字符串是一个有序的序列,所以支持索引、切片等操作(用切片可以获取子串)
1 >>> s = ‘a‘ 2 >>> type(s) 3 <class ‘str‘> #python中单字符也是字符串 4 >>> s = ‘abcde‘ 5 >>> s[0:3] #字符串可以切片,获取子串 6 ‘abc‘ 7 >>> s[1] #字符串可以索引 8 ‘b‘ 9 >>> ‘bc‘ in s #字符串支持 in 、not in 操作 10 True 11 >>> for i in s: #字符串可以循环 12 print(i) 13 14 15 a 16 b 17 c 18 d 19 e 20 >>>
在python中,为了防止每次创建基础变量,如字符串、数字等,都要申请开辟内存,所以python专门有个内存池,存放有常用的数字、字符串等。所以在python中,数字、字符串等数据类型是‘不可更改的‘,
重新赋值(更改)就相当于把变量名指向了内存中的另一块内存。
1 >>> s = ‘abc def wsx asd hello‘ 2 >>> id(s) 3 3063291967504 4 >>> s1 = s.replace(‘ def‘,‘xxx‘) 5 >>> s 6 ‘abc def wsx asd hello‘ 7 >>> s1 8 ‘abcxxx wsx asd hello‘ #字符串本身不能更改,重新赋值(更改)就相当于指向另一块内存 9 >>> id(s1) 10 3063291967720 11 >>> i = 10 12 >>> id(i) 13 1554097536 14 >>> i = 20 #数字不能重新赋值(更改),重新更改就相当于指向令一块内存 15 >>> id(i) 16 1554097856 17 >>>
所以在python中,更新字符串,就必须重新开辟内存空间
1 >>> s = ‘hello Tom‘ 2 >>> s1 = s[:6]+‘Lucy‘ #更新字符串,不推荐在拼接字符串时用‘+‘,‘*‘表示重复输出字符串,eg: ‘abc‘*3 --> ‘abcabcabc‘ 3 >>> s1 4 ‘hello Lucy‘ 5 >>> id(s) 6 3063306041456 7 >>> id(s1) 8 3063306041392 9 >>>
在需要在字符中使用特殊字符时,python用反斜杠(\)转义字符。如下表:
\(在行尾时) | 续行符 |
\\ | 反斜杠符号 |
\‘ | 单引号 |
\" | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\oyy | 八进制数,yy代表的字符,例如:\o12代表换行 |
\xyy | 十六进制数,yy代表的字符,例如:\x0a代表换行 |
\other | 其它的字符以普通格式输出 |
注意,在字符串前面加 r/R 表示打印原始字符串。即所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。
原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。
字符串的格式化:
Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
1 >>> s = ‘you are my %s I am %s year old‘ %(‘sunshine‘,22) 2 >>> s 3 ‘you are my sunshine I am 22 year old‘ 4 >>> s1 = ‘you are my{} I am {} year old‘ .format(‘sunshine‘,22) 5 >>> s1 6 ‘you are mysunshine I am 22 year old‘ 7 >>> s2 = ‘you are my{1} I am {0} year old‘ .format(22,‘sunshine‘) 8 >>> s2 9 ‘you are mysunshine I am 22 year old‘ 10 >>> s3 = ‘you are my {what} I am {age} year old‘ .format(age=22,what=‘sunshine‘) 11 >>> s3 12 ‘you are my sunshine I am 22 year old‘ 13 >>>
python中的三引号(‘‘‘ ‘‘‘) 或 (""" """):
python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
三引号的语法是一对连续的单引号或者双引号(通常都是成对的用)。可以用来定义字符串(一般是有多行或有特殊符号)、注释代码等
1 >>> s = ‘‘‘ abc 2 asd 3 \4 \n 5 ‘‘‘ 6 >>> s 7 ‘ abc
8 asd
9 \\
10 \n
11 ‘ 12 >>>
字符串常用方法:
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 ‘‘‘字符串常用方法‘‘‘ 5 s = ‘abcDEF‘ 6 7 s.capitalize() 8 ‘‘‘返回字符串s的首字母大写的副本‘‘‘ 9 s.find(sub, start=None, end=None) 10 ‘‘‘返回字符串在指定区间首次出现位置的索引,不指定区间表示整个字符串,若不存在,则返回-1‘‘‘ 11 s.islower() 12 ‘‘‘判断字符串里面的字符是否全是小写‘‘‘ 13 s.isupper() 14 ‘‘‘判断字符串里面的字符是否全是大写‘‘‘ 15 s.lower() 16 ‘‘‘返回将字符串的所有字符转换为小写后的副本‘‘‘ 17 s.upper() 18 ‘‘‘返回将字符串的所有字符转换为大写后的副本‘‘‘ 19 s.replace(old, new, count=None) 20 ‘‘‘返回将s中的子串 old 全更换为 new 后的副本,若指定了count,则只是替换一次‘‘‘ 21 s.split(sep=None, maxsplit=_1) 22 ‘‘‘将被seq(默认空格)分隔的子串以列表形式返回,若seq="a",则是被"a"分隔,eg:s.split(‘a‘) ‘‘‘ 23 s.strip(chars=None) 24 ‘‘‘返回删除字符串两端的 chars 后的副本,默认chars=None表示删除空格 eg:s.strip(‘a‘)删除s两端的"a" ‘‘‘ 25 s.swapcase() 26 ‘‘‘返回将字符串中小写转换为大写,大写转换为小写后的副本‘‘‘ 27 s.startswith(x) 28 ‘‘‘判断字符串s是否是以x开头‘‘‘ 29 s.endswith(x) 30 ‘‘‘判断字符串s是否是以x结尾‘‘‘ 31 s.partition(x) 32 ‘‘‘将字符串s按第一次遇到的x分为三部分 (‘x前‘,‘x‘,‘x后‘) ,并以元祖形式返回‘‘‘ 33 s.count(sub, start=None, end=None) 34 ‘‘‘在指定区间内seq出现的次数,区间是[s,e)‘‘‘
未完待续。。。
python 数据结构 - 字符串