首页 > 代码库 > 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 数据结构 - 字符串