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中,空字符串为假.   eg: s = '' , if not s:print('hello')  => hello 

在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专门有个内存池,存放有常用的数字(一般是[-5,256],还有就是在当前代码块中,若两个对象的值相等,那么在第一个对象申请内存后,第二个对象会直接代用那块内存,不会再重新申请内存)、字符串(若字符串中没有空格,两个相同字符串的内存是一样的。若存在空格,那么就会重新申请内存)等。所以在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)'''
35 s.index(char)
36 '''字符char在字符串中第一次出现位置的索引'''

未完待续。。。

 

 

posted on 2017-04-07 00:17  txowner  阅读(368)  评论(0编辑  收藏  举报