字符串与序列

字符串

最常用的数据类型。我们可以使用引号( ’ 或 " )来创建字符串。

python 序列换文本 python序列转化为字符串_Python

访问字符串中的值

不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。

访问子字符串,可以使用方括号来截取字符串,如下实例:

python 序列换文本 python序列转化为字符串_python 序列换文本_02

字符串更新

字符串不可修改,但可以截取字符串的一部分并与其他字段拼接,如下实例:

python 序列换文本 python序列转化为字符串_Python_03

转义字符

字符中使用特殊字符时,用反斜杠( \ )转义字符。

转义字符

描述

\ (在行尾时)

续行符

\ \

反斜杠符号

\ ’

单引号

\ "

双引号

\a

响铃

\b

退格(Backspace)

\000


\n

换行

\v

纵向制表符

\t

横向制表符

\r

回车

\f

换页

\oyy

八进制数,yy 代表的字符,例如:\o12 代表换行,其中 o 是字母,不是数字 0。

\xyy

十六进制数,yy代表的字符,例如:\x0a代表换行

\other

其它的字符以普通格式输出

字符串运算符

对字符串可以进行 + 和 * 运算,以及 in 、for…in 、[ : ]、[] 、%和以下的原始字符串。

python 序列换文本 python序列转化为字符串_字符串_04


原始字符串 :在字符串前加 r 。

python 序列换文本 python序列转化为字符串_字符串与序列_05


长字符串 :使用三重引号。

python 序列换文本 python序列转化为字符串_Python_06

字符串格式化

与 C 中 sprintf 函数一样的语法。

python 序列换文本 python序列转化为字符串_字符串_07


字符串格式化符号:

符号

描述

%c

格式化字符及其ASCII码

%s

格式化字符串

%d

格式化整数

%u

格式化无符号整型

%o

格式化无符号八进制数

%x

格式化无符号十六进制数

%X

格式化无符号十六进制数(大写)

%f

格式化浮点数字,可指定小数点后的精度

%e

用科学计数法格式化浮点数

%E

作用同%e,用科学计数法格式化浮点数

%g

%f和%e的简写

%G

%f 和 %E 的简写

%p

用十六进制数格式化变量的地址

格式化操作符辅助指令:

符号

功能

*

定义宽度或者小数点精度

-

用做左对齐

+

在正数前面显示加号( + )

< sp >

在正数前面显示空格

#

在八进制数前面显示零(‘0’),在十六进制前面显示’0x’或者’0X’(取决于用的是’x’还是’X’)

0

显示的数字前面填充’0’而不是默认的空格

%

‘%%‘输出一个单一的’%’

(var)

映射变量(字典参数)

m.n.

m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。

字符串内建函数

内容太多,省略。。。
详尽内容请点击此处

序列

序列的定义

对于序列,查阅了很多资料,网上的说法不一也,总之先参考了一张图(来自:)。

python 序列换文本 python序列转化为字符串_字符串_08


这张图说的对不对,对于现在的我来说是不确定的,毕竟我还是个小白=。=,也许之后学通了 Python 会回过头来修改这篇文章。(挖了一个好大的坑

还有一个说法也不错,比较认同该说法。该文对序列是这样定义的(来自:):

  • 数据结构是通过某种方式组织在一起的元素的集合。
  • 容器(Container)是一种Python的数据结构,基本上是包含其他对象的任意对象。序列和映射(如字典)是两类主要的容器。集合(Set)也是容器类型。
  • 序列是最基本的数据结构,是通过对数据元素进行编号将它们组织在一起的数据元素的集合。
  • Python有6中种内建的序列:列表、元组、字符串、Unicode字符串、buffer对象、xrange对象。

在翻阅参考资料中,其中我认为总结的比较好的一句话是:序列类型是一个基类类型。

通用序列操作

古话说得好:求同存异。我们先放置争议,看看统一的一部分,通用序列操作。

1、索引

序列中的每个元素被分配一个序号,即元素的位置,称为索引。以正数第一个元素的索引为0,正数第二个元素的索引为1,倒数第一个元素的索引为 -1,以此类推。

这个是我们比较熟悉的特点,我就不举例子了。

2、分片

分片使用2个冒号分隔的3个数字来完成:[头下标 : 尾下标 : 步长](满足左闭右开原则)

这个特性我在学字符串时学习过,废话不多说,直接看例子:

python 序列换文本 python序列转化为字符串_python 序列换文本_09


截取步长可以为负,正负表示读取正向和逆向,数字表示截取步长。

假设步长k,则每隔(k-1)个元素取一个元素,例如:

python 序列换文本 python序列转化为字符串_序列_10


需要注意的是:

  1. 通过切片我们得到的是一个新列表。
  2. 切片可以返回列表的浅拷贝 a[:] == a ,a[:] 将得到包含 a 所有元素的分片,是一种很有效率的复制整个列表的方法。(看不懂浅拷贝没关系,我也没看懂=。=,下面会提到)
3、加 + 和乘 *

序列连接操作,只有相同类型的序列才能进行连接操作。同样需要注意通过加和乘我们得到的是一个新列表。

python 序列换文本 python序列转化为字符串_Python_11

4、成员资格

使用in运算符(布尔运算符)检查一个元素是否在序列中,返回布尔值True或False。

python 序列换文本 python序列转化为字符串_字符串_12

5、内建函数(BIFs)

可以对任意序列操作。

函数

方法

len()

返回序列中的元素个数。

max()、 min()

返回序列中的最大或最小元素。

类型转换

list()、str()和 tuple()被用做在各种序列类型之间转换。

其他未探寻的BIFs

enumerate(iter)、len(seq)、reversed(seq)、sorted(iter,func=None,key=None,reverse=False)、sum(seq, init=0)、zip([it0, it1,… itN])

注意:
len()、reversed()和sum()函数只能接受序列类型对象作为参数,而剩下的则还可以接受可迭代对象做为参数,另外max()和min()函数也可以接受一个参数列表。

6、迭代

未知=。=

7、赋值、浅拷贝与深拷贝
  1. 直接赋值:其实就是对象的引用(别名)。
    b = a: 赋值引用,a 和 b 都指向同一个对象。
  2. 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
    b =a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
    如果原地修改子对象,父对象也会改变。
  3. 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。
    b = copy.deepcopy(a): 深度拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。

原文链接:

其他

关于字符串(以下是使用文本编辑器时需要注意的,其他情况请忽略,我也是看完才发现的):由于Python的字符串是Unicode编码的,但Unicode的编码一个字符占用若干个字节,而储存到磁盘或上传到网络时,需要把字符串转为以字节为单位bytes类型的数据(用前缀b的单引号或双引号表示,b‘abc’),而以bytes为单位的编码有ASCII和UTF-8(ASCII<UTF-8,后者包含中文)。str可以通过encode()方法转化为指定的bytes,例如

python 序列换文本 python序列转化为字符串_Python_13


所以纯英文的str用ASCII,有中文的用utf-8,如果有中文的用ASCII编码会超出范围并报错,如上图最后一个例子。反过来,我们从网络或磁盘上读取了字节流,那么读到的数据是bytes,要把bytes变为str用decode()方法:

python 序列换文本 python序列转化为字符串_字符串_14


有无法解码的字节会报错,忽略错误字节后加errors=‘ignore’:

python 序列换文本 python序列转化为字符串_字符串_15


为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。由于Python源代码也是一个文本文件,所以当你的源代码中包含中文的时候,在保存的时候就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,通常在文件开头加上这两行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

第一行告诉系统这是Python可执行程序,第二行告诉解释器按照utf-8读取源代码。