Python学习笔记(Task04:字符串与序列)

字符串与序列

字符串

最常用的数据类型。我们可以使用引号( ’ 或 " )来创建字符串。
在这里插入图片描述

访问字符串中的值

不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。
访问子字符串,可以使用方括号来截取字符串,如下实例:
在这里插入图片描述

字符串更新

字符串不可修改,但可以截取字符串的一部分并与其他字段拼接,如下实例:
在这里插入图片描述

转义字符

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

转义字符描述
\ (在行尾时)续行符
\ \反斜杠符号
\ ’单引号
\ "双引号
\a响铃
\b退格(Backspace)
\000
\n换行
\v纵向制表符
\t横向制表符
\r回车
\f换页
\oyy八进制数,yy 代表的字符,例如:\o12 代表换行,其中 o 是字母,不是数字 0。
\xyy十六进制数,yy代表的字符,例如:\x0a代表换行
\other其它的字符以普通格式输出

字符串运算符

对字符串可以进行 + 和 * 运算,以及 in 、for…in 、[ : ]、[] 、%和以下的原始字符串。
在这里插入图片描述
原始字符串 :在字符串前加 r 。
在这里插入图片描述
长字符串 :使用三重引号。
在这里插入图片描述

字符串格式化

与 C 中 sprintf 函数一样的语法。
在这里插入图片描述
字符串格式化符号:

符号描述
%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(),它增强了字符串格式化的功能。

字符串内建函数

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

序列

序列的定义

对于序列,查阅了很多资料,网上的说法不一也,总之先参考了一张图(来自:https://blog.csdn.net/zhouheng2018/article/details/79977968)。
在这里插入图片描述
这张图说的对不对,对于现在的我来说是不确定的,毕竟我还是个小白=。=,也许之后学通了 Python 会回过头来修改这篇文章。(挖了一个好大的坑

还有一个说法也不错,比较认同该说法。该文对序列是这样定义的(来自:https://blog.csdn.net/Dramaturgy/article/details/80086424):

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

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

通用序列操作

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

1、索引

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

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

2、分片

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

这个特性我在学字符串时学习过,废话不多说,直接看例子:
在这里插入图片描述
截取步长可以为负,正负表示读取正向和逆向,数字表示截取步长。
假设步长k,则每隔(k-1)个元素取一个元素,例如:
在这里插入图片描述
需要注意的是:

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

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

4、成员资格

使用in运算符(布尔运算符)检查一个元素是否在序列中,返回布尔值True或False。
在这里插入图片描述

5、内建函数(BIFs)

可以对任意序列操作。

函数方法
len()返回序列中的元素个数。
max()、 min()返回序列中的最大或最小元素。
类型转换list()、str()和 tuple()被用做在各种序列类型之间转换。
其他未探寻的BIFsenumerate(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 完全拷贝了父对象及其子对象,两者是完全独立的。

原文链接:https://blog.csdn.net/Dramaturgy/article/details/80086424

其他

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

反过来,我们从网络或磁盘上读取了字节流,那么读到的数据是bytes,要把bytes变为str用decode()方法:在这里插入图片描述
有无法解码的字节会报错,忽略错误字节后加errors=‘ignore’:
在这里插入图片描述
为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。由于Python源代码也是一个文本文件,所以当你的源代码中包含中文的时候,在保存的时候就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,通常在文件开头加上这两行:

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值