Python字符串
在Python中,万物皆对象,显然字符串是对象类型,用str表示。字符串类型通常用单引号或者双引号包裹起来。
|
|
变量和字符串
在Python中变量无类型,对象有类型
|
|
连接字符串
|
|
用“+”拼接起来的字符串的两个对象必须是同一类型的。如果是数字则是求和,如果是字符串则得到一个新的字符串。
还有其他两种方法可以将整数转化为字符串:
- str():将整数对象转换为字符串对象
|
|
- repr():相当于反引号``
|
|
- int():将字符串对象转换为整数对象
|
|
转义字符
在字符串中,总会有一些特殊的符号,就需要用转义符。所谓转义,就是不采用符号本来的含义,而采用另外一含义。下面表格中列出常用的转义符:
| 转义字符 | 描述 |
|---|---|
| \ | (在行尾时) 续行符 |
| \ | 反斜杠符号 |
| \’ | 单引号 |
| \” | 双引号 |
| \a | 响铃 |
| \b | 退格(Backspace) |
| \e | 转义 |
| \000 | 空 |
| \n | 换行 |
| \v | 纵向制表符 |
| \t | 横向制表符 |
| \r | 回车 |
| \f | 换页 |
| \oyy | 八进制数,yy代表的字符,例如:\o12代表换行 |
| \xyy | 十六进制数,yy代表的字符,例如:\x0a代表换行 |
| \other | 其它的字符以普通格式输出 |
原始字符串
用转义符能够让字符串中的某些符号表示原来的含义,而不是被解析成某种具有特别能力的符号。下面看看这个代码:
|
|
如何避免上述代码的问题?有两种方法,其一是前面介绍的转义符解决。
|
|
其二是声明为原始字符串
|
|
如r"c:\news",由r开头引起的字符串就是声明了后面引号里的东西是原始字符串,在里面放任何字符都表示该字符的原始含义,不需要再用转义符了。
raw_input和print
下面实现接收和打印用户通过键盘输入的内容:
不过在写这个功能前,要了解函数:
- Python 2:
raw_input() - Python 3:
input()
这是Python的内建函数(built-in function)。关于内建函数,可以分别通过下面的链接查看:
关于Python的内建函数,下面列出来,供参考:
|
|
怎么才能知道哪个函数怎么用,并且用来干什么的呢?
- help(abs)命令
raw_input
|
|
|
|
特别提醒的是,print的返回值默认是以\n结尾的,所以每个输出语句之后自动换行。
索引和切片
索引
在Python中,把像字符串这样的对象类型统称为序列,顾名思义,序列就是有序排列。在这个序列中,每个人都有编号,编号和每个字符一一对应,在Python中这些编号称为索引。
|
|
也可以这样做:
|
|
通过字符找到其在字符串中的索引值:
|
|
切片
不管是得到一个字符还是多个字符,通过索引得到字符的过程称为切片。
|
|
如果在切片的时候,冒号左右都不写数字,就是前面所操作的c = lang[:],其结果是变量的值c与源字符串lang一样,即复制了一份,那是不是真的复制呢?下面的方式检验一下:
|
|
从上面可以看出,两个内存地址一样,说明c和lang两个变量指向的是同一个对象。用c = lang[:]的方式并没有生成一个新的字符串,而是将变量c这个标签页贴在原来那个字符串上了。
|
|
上述这种情况,变量c和lang也指向同一个对象。
基本操作
所有序列都有如下操作,字符串是序列的子集。
- len():返回序列长度
- +:连接两个序列
- *:重复序列元素
- in: 判断元素是否存在于序列中
- max():返回最大值
- min():返回最小值
- cmp(str1,str2): 比较两个序列值是否相同
“+”连接字符串
|
|
in
in用来判断某个字符串是不是在另外一个字符串内,或者判断某个字符串内是否包含某个字符串,包含则返回True,否则返回false。
|
|
max()
|
str = “python”
max(str)
‘y’
12
min()
|
|
cmp()
将两个字符串进行比较,首先将字符串中的符号转化为对应的数字,然后再比较
- 如果返回的数值小于0,说明前者小于后者
- 等于0,表示两者相等
- 大于0,表示前者大于后者
|
|
|
|
“*”
以指定的次数重复打印字符串
|
|
len()
len()返回字符串的长度,返回值类型是int型
|
|
常用的字符串方法
字符串的方法有很多,可以通过dir来查看:
|
|
判断字符串是否全是字母
|
|
分割字符串
split()作用是将字符串根据某个分隔符进行分割。
|
|
去掉字符串两头的空格
|
|
字符大小写转换
|
|
join连接字符串
|
|
字符串格式化输出
使用占位符
|
|
- %s 字符串(采用str()的显示)
- %r 字符串(采用repr()的显示)
- %c 单个字符
- %b 二进制整数
- %d 十进制整数
- %e 指数(底数为e)
- %f 浮点数
使用format格式化
{}作为占位符
|
|
字典式格式化
|
|
综上,推荐使用:string.format()
Python列表
此前已经知道了Python的三种对象类型:int、float和str。下面开始学习一种新的Python对象类型:list。list在Python中具有非常强大的功能。
定义
在Python中,用方括号表示一个list:[],方括号里面的元素类型,可以是int型数据,也可以是str类型的数据,甚至也可以是bool类型数据。而像Java语言,数组里面只能存在一种类型的数据。
|
|
下面看看list具体的使用
|
|
索引和切片
索引
和字符串中的索引类似,只不过list是以元素为单位,而不是以字符为单位进行索引。
|
|
切片
|
|
序列的切片,一定要左边的数字小于右边的数字,lst[-1:-3]就没有遵守这个规则,返回的是一个空。
反转
|
|
当然,也可以对字符串进行反转:
|
|
可以看出,不管是str还是list,反转之后原来的值没有改变。这说明,这里的反转不是把原来的值倒过来,而是新生成了一个值,生成的值跟原来的值相比是倒过来的。
Python还有一种方法使list反转,且比较容易阅读和理解,特别推荐:
|
|
对list的操作
len()
|
|
+,连接连个序列
|
|
*,重复元素
|
|
in
|
|
max()和min()
|
|
cmp()
|
|
追加元素
|
|
等价于:
列表的函数
list是Python中的苦力,那么它都有哪些函数呢?
|
|
先不管以双下划线开始和结尾的函数,就剩下以下几个
|
|
append和extend
list.append(x),是将某个元素x添加到已知的一个列表的尾部。
list.extend(L),则是将两个列表合并,或者说将列表L追加到列表list中。
|
|
|
|
如果extend的参数对象是数值型则报错。
所以,extend的参数对象是一个list,如果是str,则Python会先把它按照字符为单位转化为list再添加到目标list中。官方文档指出extend的元素对象必须是iterable(可迭代的)。
判断一个对象是不是可迭代的?
|
|
通过内建函数hasattr()判断一个对象是不是可迭代的,它的判断本质就是看那个类型中是否有__iter__函数。
append和extend函数的相同点
|
|
|
|
由上面两段代码可知,append和extend函数的共同点:
- 都是原地址修改列表,不会创建一个新的列表
- 没有返回值
append和extend函数的不同点
|
|
可知,append是整体的追加,extend是单个的追加
count
count的作用是计算某个元素在该list中出现的次数
|
|
index
index计算元素在该列表首次出现的位置
|
|
insert
list.insert(i,x),想列表中指定的位置插入元素x。
|
|
pop和remove
删除列表中元素的方法有两个,分别是:
- list.remove(x)
删除列表中首次出现的元素x,如果不存在元素x,则报错
|
|
- list.pop([i])
删除列表中位置i的元素并且返回该元素。如果没有指定位置i,则默认删除并返回列表的最后一个元素。
|
|
reverse
将列表的元素顺序反过来,不会创建新的列表,因此没有返回值
|
|
sort
sort是对列表进行排序,不会创建新的列表,因此没有返回值
|
|
|
|
比较列表和字符串
相同点
- 都属于序列,因此那些属于序列的操作对两者都适用
区别
- 最大区别是,列表自身可以改变,字符串自身不可以改变
- 字符串只能通过创建一个新的str来改变,新的str不是原来的字符串对象
多维列表
- 在字符串中,每个元素只能是字符
- 在列表中,每个元素可以是任何类型
|
|
列表和字符串的相互转化
str.split()
|
|
“split”.join(list)
|
|
Python元组
定义
元组(tuple)是用圆括号括起来的,元素之间用逗号隔开。
|
|
元组也是一种序列,这一点与列表、字符串类似。有以下特点:
- 元组其中的元素不能更改,和字符串类似
- 元组中的元素可以是任何类型的数据,和列表类似
索引和切片
元组的索引和切片的基本操作和字符串、列表是一样的。
|
|
特别注意:如果一个元组中只有一个元素,应该在该元素后面加上一个半角的英文逗号:
|
|
列表和元组之间可以实现转换,分别使用list()和tuple()
|
|
用途
- 元组比列表操作速度快。如果定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用元组代替列表
- 如果对不需要修改的数据进行“写保护”,可以使代码更安全,这时使用元组而不是列表。如果必须要改变这些值,则需要执行元组到列表的转换。
- 元组可以在字典中被用作key,但是列表不行。因为字典的key必须是不可变的,元组本身是不可变的。
- 元组可以用在字符串格式化中。