Burnov

导航

07 数据结构

  本章内容:

    1、type命令

    2、序列

    3、元组

    4、列表

    5、列表函数

    6、列表排序

    7、列表解析

    8、字典

    9、集合(set)

------------------------------

  python中主要的数据结构就是列表和字典。这节中,我们主要介绍值集合以及常用的函数;

 

1、type命令

  查看数据的数据类型;

  在使用数据集合的时候,我们有时候需要知道数据集合中某个元素的数据类型,此时,就会使用到type命令;

 

2、序列

  序列就是一组安装顺序排列的值:

    a\第一个正索引为0,指的是最左端

    b\第一个负索引为-1,指的是最右端

    c\可以使用切片来赋值子序列;例如seq[begin:end];

    d\可以使用 + 和 * 进行合并;序列的类型必须相同,及不能拼接 元组合列表;

    e\len可以用来计算序列的长度 len(s);

    f\表达式 x in s 检查序列 s 是否包含元素 x。 换句话说,如果 s 包含元素 x 则返回值 True 否则返回 False。

  字符串和列表是最常用的序列;元组有独特的用途;

 

3、元组

  元组是一种不可变的序列。包含0个或者更多个值。它可以包含任意的Python值,甚至可以包含其他元组。

  items中包含多个元组,索引可以多重指定;

  有逗号,就表示元组,如果没有,则表示整型;(5,)

   元组的特点:它是不可变的!!!不能进行修改;

  但是,我们可以通过重新定义变量的方式,来存放元组对应的数据,达到改变元组元素的目的;例如上图--删除元组第一个数据;

  

  常见的元组函数:

    x in tup  如果x是元组tup的一个元素,则返回True,否则返回False

    len(tup)  元组tup包含的元素数

    tup.count(x)  元素x在元组tup中的出现的次数

    tup.index(x)  元组tup中第一个元素x的索引;如果x未包含在元组tup中,将引发ValueError异常

  例如:

  

  与字符串一样,可以通过加减号来凭借元组:

 

4、列表

  列表与元组基本相同,但是列表可变,我们可以添加、删除、修改列表元素;

  一般列表使用方括号括起来;与字符串和元组一样,可以使用len(s)函数,+ * 来拼接列表;

  另外,与字符串和元组一样,你可以使用索引和切片来访问元素和子列表;

  注意:列表可以包含任意的类型值,包括数字、字符以及列表;空列表为[];

  

  列表是可变的;

  修改列表的值,如下图:

  列表如果引用自己,作为列表中的一个值,则使用[...]来表示,而不是愚蠢的把自己的值重复赋予到列表中来;

 

5、列表函数

  常见的列表相关的函数,如下:

    s.append(x)  在列表的 s 的末尾添加元素 x

    s.count(x)  返回元素 x 在列表 s 中出现的次数

    s.extend(lst)  将lst的所有元素都添加到列表 s 末尾

    s.index(x)  返回第一个 x 元素的索引

    s.insert(i,x)  将元素 x 插入到索引 i 指定的元素前面,结果是 s[i] == x

    s.pop(i)  删除并返回s 中索引为 i 的元素

    s.remove(x)  删除s 中的排列顺序

    s.reverse()  反转 s 中的元素的排列顺序

    s.sort()  将s 的元素按升序排列

  下面的代码:根据传入的数字列表创建一个消息列表;

# numoute.py
def numnote(lst):
    msg = []
    for num in lst:
        if num < 0:
            s = str(num) + ' is negative'
        elif 0 <= num <= 9:
            s = str(num) + ' is a digit'
        msg.append(s)
    return msg

  运行结果如下:

  要答应消息,让每条消息占据一行,就可以使用 for 循环来实现;

  

  函数extend 类似于 append,但在末尾添加一个序列,如下图:

 

  函数pop删除并返回给定索引对应的元素,如下所示:

 

  函数remove(x)删除列表中的第一个x元素,但不返回该元素:

 

  函数reverse翻转列表的元素排序顺序:

 

6、列表排序

  排序对于数据存储来说非常重要,我们早查找数据的时候如果数据是有序的,则会大大提高数据查找的速率;

  sort() 函数,则是Python中实现排序的函数;

  sort()函数,是默认升序,如果需要反向排序,则使用reverser()函数来实现:

  包含元素的列表如何排序呢?

  由上图可知,元组的排序是先看第一个元素,如果第一个元素相同就看第二个元素;

 

7、列表解析

  列表的一种特殊表示方法--列表解析;如下图:

  这种表示法的主要优点就是间接易读。下面的代码就是没有做解析时使用的;

result = []
for n in range(1,11)
    result.append(n * n)

  示例:

    将列表中的每个数字翻倍并加上7:

    包含前10个自然数的立方:

    同时,也可以再列表解析中使用字符串:

    列表解析的一种常见用途是,以某种方式修改现有列表,如下:

  

  列表解析进行筛选;

  例如:下图的列表解析返回一个列表,该列表只包含列表nums中的正数:

  下面的代码与上述代码等价;

   下面函数使用列表解析删除字符串中的所有元音:

# eatvowels.py
def eat_vowels(s):
    """ Removes the vowels from s.
    """

    return ''.join([c for c in s if c.lower() not in 'aeiou'])

  运行结果如下:

  [c for c in s if c.lower() not in 'aeiou'] 表示:

  这是一个筛选列表解析,它以每次一个字符的方式扫描s,将每个字符转换为小写,再检查它是不是元音。如果是元音,则不将其加入最终的列表,否则将其加入最终列表;

  该列表解析的结果是一个字符串列表,因此我们使用join将所有字符串拼接成一个,再返回这个字符串。

 

8、字典

  在存储键 - 值对方面,Python字典是一种效率极高的结构。例如:

  ‘red’ 为键,而后面 1 则为值;访问字典的数据:

  使用键来访问字典值是一种效率极高的方式,即便字典包含几千个数据;

  同时,字典与列表一样,可以修改、添加、删除 键-值 对。例如:

  

  对字典键有两个限制:1、字典中的键必须独一无二;2、键必须是不可变,因此,字典键不能是列表,也不能是字典。

  关于字典的所有函数:

    d.items()  返回一个由字典d的键 - 值 对组成的视图(view)

    d.keys()  返回一个字典d的键组成的视图

    d.values()  返回一个由字典d的值组成的视图

    d.get(key)  返回与key相关联的值

    d.pop(key)  删除键key并返回与之相关联的值

    d.popitem()  删除字典d中的某个键 - 值对并返回相应的键 - 值

    d.clear()  删除字典d的所有元素

    d.copy()  复制字典d

    d.fromkeys(s,t)  创建一个字典,其中的键来自s,值来自t

    d.setdefault(key,v)  如果键key包含在字典d中,则返回其值;否则,返回v并将(key,v)添加到字典d中

    d.update(e)  将e的键 - 值对添加到字典d中;e可能是字典,也肯能是键 - 值对序列

  例子如下:

 

9、集合(set)

  集合是一系列不重复的元素。集合类似于字典,但只包含键,而没有相关联的值。

  集合分两类:可变集合和不可变集合。对于可变集合,可以修改、添加、删除元素;而不可变的集合则一旦创建,就不能修改;

  集合可以用来删除重复项,如下图:

  要获取集合的支持的函数,可以通过dir(set)来查看,这里就不再多说;

 

posted on 2019-07-13 14:36  Burnov  阅读(231)  评论(0编辑  收藏  举报