Python 3 学习笔记:序列

发布时间:2019-09-23 17:01:06编辑:auto阅读(1583)

    序列

    索引

    序列是一块用于放置多个值得连续存储空间,并且按特定顺序排列,每个值(称为元素)都分配一个整数(由左至右则从 0 开始;由右至左则从 -1 开始),称为索引(index)或位置,如下所示:

    Python 3 学习笔记:序列

    可以根据索引获取每个元素实际的值

    string = "飞流直下三千尺,疑是银河落九天。"
    print(string[5])
    复制
    则上面的语句的运行结果为“千”。

    切片

    切片是访问序列中元素的另一种方法,该方法可以访问一定范围内的元素。

    1
    sequence[startIndex : endIndex : step]
    复制
    如果 startIndex 未指定,则默认从 0 开始;如果 endIndex 未指定,则默认一直到最后才结束切片;如果 step 未指定,则默认为 1,且其前面的冒号可以省略。

    序列相加

    在 Python 中支持将多个相同类型的序列相加(或者说拼接更准确),该操作只是单纯的将序列拼接在一起,而不进行其他附加的任何运算。

    seq_1 = "飞流直下三千尺,"
    seq_2 = "疑是银河落九天。"
    print(seq_1 + seq_2)
    复制
    当然,拼接之后实际上就是得到了一个新的序列,其索引将会重新排序。

    序列相乘

    数学意义上的乘法就是将一个数重复相加若干次之后得到一个结果,序列的乘法同样如此,也是将一个序列重复拼接若干次之后得到一个新的序列。

    1
    2
    sequence = "Hello, Python !"
    print(sequence * 3)
    复制
    in

    in 关键字用于检查某个元素是否在被检测的序列中,

    1
    element in sequence
    复制
    在 in 的前面加上 not 关键字,则表示检查某个元素是否不在被检测的序列中,

    1
    element not in sequence
    复制
    如果满足以上两种操作,则返回 True,否则返回 False。

    len()

    len() 方法用于计算序列的长度,即序列中元素的个数,

    1
    len(sequence)
    复制
    max()

    max() 方法用于计算序列中元素的最大值

    1
    max(sequence)
    复制
    我们知道数字可以比较大小,那么序列(如字符串、列表等)是如何比较大小的呢?序列在比较大小的时候,会先将元素按照 ASCII 码表转换成数字,然后再进行比较,这样就可以得出最大值或者最小值了,如:

    1
    2
    seq = "Hello, Python!"
    print(max(seq))
    复制
    得到的结果是小写字母 y 。

    max() 函数会先将 seq 的所有元素(每个字母、标点)转换成 ASCII码值,然后取出码值最大的元素打印出来。我们常用的字符,如数字、字母等,在 ASCII 码表中的码值大小依次是 数字<大写字母<小写字母。当然,ASCII 码表中不只包含数字、字母,其中还有许多标点符号、特殊符号(具体码表请自行查找)。

    当然,如果我们想验证 max() 函数得到的结果是否正确,可以使用 ord() 函数获取 seq 中每个元素的 ASCII 码值,

    seq = "Hello, Python!"
    lst = []

    for n in range(len(seq)):
    lst.append(ord(seq[n]))

    print(lst)
    复制
    得到的结果是 [72, 101, 108, 108, 111, 44, 32, 80, 121, 116, 104, 111, 110, 33],从中可以看出最大值是 121,然后我们再用 chr() 函数看看 ASCII 码值 121 对应的字符是什么,

    1
    print(chr(121))
    复制
    得到的结果也是小写字母 y 。

    min()

    min() 函数用于计算序列中元素的最小值,原理同 max() 函数一样。

    字符串

    字符串就是连续的字符序列,可以是计算机能够表示的所有字符的集合。

    字符串不可变,在 Python 编程中,因为没有设置字符(char)类型,所以字符串通常使用引号(包括单引号、双引号、三引号)括起来,这三种引号没有本质上的差别,只是单引号、双引号中的内容必须在同一行,而三引号可以在连续的多行上。

    常用操作

    拼接字符串

    使用 “+” 运算符可以将多个字符串拼接在一起,从而生成一个字符串。

    重复字符串

    使用 ”*“ 运算符可以重复字符串,类似数字的乘法。

    计算字符串的长度

    使用 len() 函数可以获取字符串中字符的个数,

    1
    len(string)
    复制
    其中,string 表示要统计长度的字符串。

    en() 函数在计算字符串长度时,不区分符号、数字、英文和汉字,所有字符均按一个字符进行计算。

    但是,根据编码方式的不同,字符所占的字节数也不同(这里主要针对汉字,如采用 GBK/GB2312 编码,汉字占 2 个字节;而如果采用 UTF-8/unicode 编码,则汉字占 3 或 4 个字节。在 Python 编程中,数字、英文、符号、下划线和空格均占一个字节)。所以,如果需要取得字符串实际所占的字节数,就需要通过 encode() 方法指定编码格式,例如:

    print(len("提放有度,自在为人;保持前进,以致更好!".encode("utf-8")))

    print(len("提放有度,自在为人;保持前进,以致更好!".encode("gbk")))
    复制
    根据运行结果可以看出,同一句话,采用 UTF-8 编码方式每个汉字字符占 3 个字节,而如果采用 GBK 编码方式则每个汉字字符占 2 个字节。

    截取字符串

    截取字符串采用切片的方式实现,

    1
    string[startIndex : endIndex : step]
    复制
    分割 & 合并字符串

    分割字符串
    把字符串按照指定的分隔符分成字符串列表,该列表中的元素不包含分隔符,

    1
    string.split(symbol, maxsplit)
    复制
    其中,symbol 表示分隔符;maxsplit 表示分割次数,如果不指定则不限制次数。

    1
    print("提放有度,自在为人,保持前进,以致更好".split(","))
    复制
    合并字符串
    合并字符串正好与分割相反,是将多个字符串采用固定的分隔符连接在一起,

    1
    string = symbol.join(sequence)
    复制
    例如,

    1
    2
    3
    list = ["小明", "小红", "小刚"]
    string = "@".join(list)
    print(string)
    复制
    检索字符串

    在 Python 中提供多种语句查找指定字符串的方法。

    count()
    该方法用于检索指定字符串在另一个字符串中出现的次数,如果不存在则返回 0,否则返回出现的次数,

    1
    string.count(substring, startIndex, endIndex)
    复制
    string 表示被被查找的字符串;substring 表示查找的子串;startIndex 表示起始位置的索引,默认为零;endIndex 表示结束位置的索引,默认为最后一个字符的索引。

    1
    print(["小明", "小红", "小刚"].count("小红"))
    复制
    find()
    该方法用于检测是否包含指定的子字符串,如果不存在则返回 -1,否则返回首次出现该子字符串的索引,

    1
    string.find(substring, startIndex, endIndex)
    复制
    例如,

    1
    print("小明和小刚一起去小红家里做客".find("小红"))
    复制
    in
    该关键字用于判断子字符串是否在目标字符串中存在,是则返回 True,否则返回 False,

    1
    substring in string
    复制
    例如,

    if "小红" in ["小明", "小红", "小刚"]:
    print("TRUE")
    else:
    print("FALSE")
    复制
    index()
    index() 和 find() 方法类似,也是用于检测目标字符串是否包含指定的子字符串,但是使用 index() 方法检测时,如果不存在则会抛出异常,

    1
    string.index(substring, startIndex, endIndex)
    复制
    例如,

    1
    print(["小明", "小红", "小刚"].index("小红"))
    复制
    startswith()
    该方法检测目标字符串是否以指定的子字符串开头,如果是则返回 True,否则返回 False,

    1
    string.startswith(substring, startIndex, endIndex)
    复制
    例如,

    1
    print("小红邀请小明和小刚来家里做客".startswith("小红"))
    复制
    endswith()
    该方法检测目标字符串是否以指定的子字符串结尾,如果是则返回 True,否则返回 False,

    1
    string.endswith(substring, startIndex, endIndex)
    复制
    字母大小写转换

    lower()
    该方法用于将字符串中的大写字母转换为小写字母。

    1
    string.lower()
    复制
    upper()
    该方法用于将字符串中的小写字母转换为大写字母。

    1
    string.upper()
    复制
    去除空格 & 特殊字符

    strip()
    该方法用于去除字符串左、右两侧的空格(包括空格、制表符、回车符、换行符等)和特殊字符,

    1
    string.strip(symbol)
    复制
    lstrip()
    该方法用于去掉字符串左侧的空格和特殊字符

    1
    string.lstrip(symbol)
    复制
    rstrip()
    该方法用于去掉字符串右侧的空格和特殊字符

    1
    string.rstrip(symbol)
    复制
    格式化字符串

    格式化字符串是指先制定一个模版,在这个模版中预留几个空位,然后再根据需要填上相应的内容。这些空位需要通过指定的符号标记(即占位符),而这些符号还不会显示出来。

    使用 % 操作符
    1
    "%[-][+][0][m][.n][symbol]" % strTuple
    复制
    这种方式是 Python 早期提供的方法,自从 Python 2.6 开始,字符串提供了 format() 方法对字符串进行格式化(目前比较推荐这种方式进行格式化字符串),所以这里就不过多学习了。

    format() 方法
    基本语法如下,

    1
    stringTemplate.format(args)
    复制
    stringTemplate 用于指定字符串的显示样式,即模版;args 用于指定替换模版中占位符的实际内容,多个项之间使用逗号分隔。

    创建模版时,需要使用大括号和冒号指定占位符,语法如下,

    1
    {index:[fill][align][sign][#][width][.precsion][type]}
    复制
    Python 3 学习笔记:序列

    其中,type 的类型如下:

    Python 3 学习笔记:序列

    列表

    由一系列按特定顺序排列的元素组成,这些元素的类型可以是 Python 中的任何数据类型。列表是 Python 中内置的可变序列,在形式上,是将其所有元素放在中括号([])中,两个相邻的元素使用逗号(,)分隔。列表中的元素可以是不同的数据类型,元素与元素之间互相独立,互不干扰。

    创建列表

    只需要给列表指定一个标识符,然后将其元素放入其中即可:

    1
    list = ["hello", "python", 2019, 7, 31]
    复制
    当然,在实际编程过程中,我们也可以先创建一个空列表,然后再需要的时候,在其中放入元素,

    1
    list = []
    复制
    删除列表

    当我们不在需要某个列表的时候,只需要使用 del 语句即可删除:

    1
    del list
    复制
    访问列表元素

    因为列表也是序列的一种,所以也可以使用索引、切片的方式获取列表中的元素。

    操作列表元素

    添加元素

    可以使用 append() 方法向列表的结尾处追加一个元素,

    1
    list.append(element)
    复制
    该方法只能向列表的结尾处追加元素,如果想要向列表的中间插入一个元素,可以使用如下方法,

    1
    list.insert(index, element)
    复制
    insert() 方法会向指定的索引处插入一个元素,原位置的元素及其以后的元素会自动向后退一位,即其原索引加一。

    上面的两种方法都是想列表中添加一个单一的元素,如果想要向一个列表中添加另一个列表,则可以使用如下方法,

    1
    list.extend(sequence)
    复制
    该方法会将 sequence 中的元素按原顺序依次追加到 list 的结尾处。

    示例代码:

    list = ["hello", "python"]

    append() 方法

    list.append(2019)
    print(list)

    insert() 方法

    list.insert(2, "world")
    print(list)

    extend() 方法

    sequ = ["天下", "兴亡"]
    list.extend(sequ)
    print(list)
    复制
    修改元素

    通过索引定位到要修改的元素,然后直接给其赋值即可,

    1
    list[index] = newValue
    复制
    删除元素

    通过索引删除
    和修改元素相似,定位要删除的元素的索引,然后使用 del 关键字删除即可,

    1
    del list[index]
    复制
    根据元素的值删除
    使用列表的 remove() 方法实现,

    1
    list.remove(elementValue)
    复制
    对列表进行统计与计算

    获取某个元素出现的次数
    使用列表的 count() 方法可以获取列表中某个元素的个数,

    1
    list.count(element)
    复制
    获取某个元素首次出现的索引
    通过列表的 index() 方法可以获取指定元素在该列表中第一次出现的索引,

    1
    list.index(element)
    复制
    求纯数字列表中元素的和
    如果一个列表的元素全部是数字,则可以使用列表的 sum() 方法求其全部元素的和,

    1
    sum(list, addend)
    复制
    其中,addend 为可选参数,默认值 0,如果指定则在列表元素之和的基础上再加上 addend ,如:

    list = [1, 2, 3, 4, 5, 6, 7, 8, 9]

    print(sum(list))
    print(sum(list, 3))
    复制
    列表元素排序

    sort() 方法
    该方法用于将列表中的元素按指定方式排序,排序后元素的索引将会改变,

    1
    list.sort(key=None, reverse=False)
    复制
    key 用于指定从每个元素中提取一个用于比较的键;reverse 默认为 False,表示升序排列,如果为 True 则降序排列。

    sort() 方法没有返回值,所以只能对列表排序后,输出该列表,

    list = ["hello", "Python", "world", "Welcome", "list"]

    list.sort()
    print(list)
    复制
    对全部元素均为数字的列表排序很简单,如果是对字符串元素进行排序,则先对大写字母排序,然后再对小写字母进行排序。如果想不区分大小写排序,需要指定 key 参数的值,如 key=str.lower 。

    而且,需要注意如果一个列表中的元素既有数字,又有字符串,则无法使用 sort() 方法进行排序。

    sorted() 函数
    在 Python 中,提供了一个内置的 sorted() 函数,用于对列表进行排序,该方法返回一个排序后的列表,而原列表保持不变,

    1
    new_list = sorted(old_list, key=None, reverse=False)
    复制
    其中,参数 key 和 reverse 的作用和 sort() 方法的参数一样,例如:

    old_list = ["hello", "Python", "world", "Welcome", "list"]

    new_list = sorted(old_list, key=str.lower, reverse=True)
    print(new_list)
    复制
    元组

    元组与列表相似,也是有一系列按特定顺序排列的元素(可以是 Python 中的任意数据类型)组成,但元组是不可变序列,即不能向元组中追加、删除元素。在形式上,元组的所有元素被放入一对小括号中,两个相邻的元素使用逗号分隔,元素之间没有任何关系。由于元组的不可变特性,所以元组一般用于保存程序中不可修改的内容。

    创建元组

    只需要给元组指定一个标识符,然后在其中填充元素即可,

    1
    tuple = ("hello", "python", 2019, 7, 31)
    复制
    我们也可以创建一个空元组,

    1
    tuple = ()
    复制
    在 Python 中,元组也不是一定就会使用小括号括起来,只要将一组元素使用逗号分隔开来,Python 就可以视其为元组,

    1
    tuple = "hello", "python", 2019, 7, 31
    复制
    当我们使用 print() 函数打印该元组时,这些元素将会被小括号括起来。

    如果创建一个只有一个元素的元组,则需要在元素后面加一个逗号,否则该元组将会被视为一个字符串,或者其他数据类型。

    删除元组

    因为元组已经创建就不可再改变,所有只能删除元组,而不能删除其中的元素,

    1
    del tuple
    复制
    访问元组元素

    元素也是一种序列,所以也可以使用索引、切片的方式访问其中的元素。

    元组与列表的区别

    列表属于可变序列,其元素可以被修改或删除;而元组不能,只能整体替换
    元组比列表的访问和处理速度快
    元组可以作为字典的键,而列表不可以
    字典

    在 Python 中,字典也是可变序列,但是字典没有索引,而是以 键-值 对的形式存储数据。字典具有一下特征;

    通过 键 而不是索引来读取
    字典是任意对象的无需集合
    字典是可变的,并且可以任意嵌套
    字典的 键 必须是唯一的
    字典的 键 必须不可变
    创建字典

    定义字典时,每个元素都包含两个部分 键 和 值 ,它们之间使用冒号分隔,组成一个元素,元素和元素之间使用逗号分隔,

    1
    dictionary = {key_1:value_1, key_2:value_2, ..., key_n:value_n}
    复制
    元组中每个元素的 键 必须是唯一的、不可变的,可以是数字、字符串或者元组。元素的 值 可以是 Python 中的任何数据类型,且可以不是唯一的。

    除了直接创建字典,也可以通过 dict() 和 zip() 函数将列表、元组组合成一个字典,

    1
    dictionary = dict(zip(tuple, list))
    复制
    如果 tuple 和 list 的长度不同,则以短的为基准创建相同长度的字典。

    删除字典

    删除字典同样可以使用 del 关键字,

    1
    del dictionary
    复制
    如果不想删除字典,而只是想删除其中的全部元素,则可以使用 clear() 方法,

    1
    dictionary.clear()
    复制
    访问字典元素

    因为字典不像列表、元组一样具有索引,所以不能通过索引、切片的方式访问其元素。字典只能通过 键 访问其对应的 值。

    操作字典元素

    添加元素

    字典同列表一样是可变序列,所以可以向其中添加元素,只需要指定元素的键和值即可,

    1
    dictionary[key] = value
    复制
    只要新加入的 key 在字典中已存在的键中不存在即可。

    修改元素

    修改字典的元素其实就是变相的添加元素,只需要 key 值在字典中已存在,就会将其对应的 value 替换成新的值。

    删除元素

    删除字典中的元素同样可以使用 del 关键字,

    1
    del dictionary[key]
    复制
    将字典元素的 key 删除,其对应的 value 也会被删除,则这个元素在字典中就不存在了。

    集合

    Python 中的集合和数学中的集合相似,也是用于保存不重复元素的,有可变集合和不可变集合两种。在形式上,集合中的元素之间用逗号分隔,所有元素被放在大括号中。集合最好的应用就是去除重复元素,因为集合中的每个元素都是唯一的。

    创建集合

    直接将所有元素放入括号中,然后给定一个标识符即可,

    1
    set = {element_1, element_2, ..., element_n}
    复制
    如果创建集合的时候,不小心输入了若干个重复的元素,Python 会自动只保留一个。

    我们也可以使用 set() 函数将列表、元组转换成集合,

    1
    set = set(list/tuple)
    复制
    如果我们想创建一个空集合,也只能使用 set() 方法,而不使用空的大括号(因为空的大括号表示一个空字典)。

    删除集合

    集合同样可以使用 del 关键字删除,

    1
    del set
    复制
    操作结合

    添加元素

    可以使用 add() 方法向集合中添加元素,

    1
    set.add(element)
    复制
    删除元素

    可以使用 pop() 或 remove() 方法删除集合中的元素,或者使用 clear() 方法清空集合中的元素,

    1
    set.pop()
    复制
    pop() 方法会按顺序删除集合中的第一个元素。

    1
    set.remove(element)
    复制
    remove() 方法需要指定要删除的元素,如果该元素不存在,则抛出异常。

    1
    set.clear()
    复制
    clear() 方法会删除集合中的所有元素,使其变为一个空集合。

    集合运算

    交集

    在 Python 中,求集合的交集使用 & 符号进行运算。

    并集

    在 Python 中,求集合的并集使用 | 符号进行运算。

    差集

    在 Python 中,求集合的差集使用 - 符号进行运算。

    对称差集

    在 Python 中,求集合的对称差集使用 ^ 符号进行运算。

    例如,

    1
    2
    3
    4
    5
    6
    7
    set_1 = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}
    set_2 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

    print(set_1 & set_2)
    print(set_1 | set_2)
    print(set_1 - set_2)
    print(set_1 ^ set_2)

关键字