Python_实用入门篇_08

发布时间:2019-03-03 10:38:16编辑:auto阅读(2196)

    Python序列内置类型之列表类型详解 


    1.Python序列概念

        数学上,序列是被排成一列的对象(或事件)这样每个元素不是在其他元素之前,就是在其他元素之后。这里,元素之间的顺序非常重要。序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字,也就是它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。 

     

    2.Python中属于序列的内置类型种类

        Python有6个序列的内置类型(列表、元组、字符串、Unicode字符串、buffer对象、xrange对象),但最常见的是列表和元组。序列都可以进行的操作包括索引,切片,加,乘,检查成员。

    3.Python的列表操作

          1.创建一个列表(创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可,里面的元素可以是列表,数字或者字符串等等)

    list1 = [1, 2, 3, 4, 5 ]

         2.索引(使用下标索引来访问列表中的值)

    list1 = [1, 2, 3, 4, 5, 6, 7 ]
    print(list1[0])

         3.列表元素增删操作(有.append()方法,.pop()方法,.remove()方法,.del()方法,还有一些方法在下面表里,自己查哦)

    list = []          ## 空列表
    list.append("red")
    list.append("Molly”) ## 使用 append() 添加元素 print(list) >>>[“red”,"Molly"]

    list.pop()#移除列表中的一个元素(如果括号参数为空,则默认删除最后一个元素),并且返回该元素的值
    print(list)
    >>>["red"]

    list.remove("Molly")#删除列表中的具体元素
    print(list)
    >>>[]

    list = ["red","molly"]
    del list[1]
    print(list)
    >>>["red"]

    注意:如果用.remove方法删除列表中具体元素,列表中有重复的元素,默认删除第一个。

        4.Python列表脚本操作符(和字符串操作类似)

    Python 表达式 结果 描述
    len([1, 2, 3]) 3 长度
    [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合
    ['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复
    3 in [1, 2, 3] True 元素是否存在于列表中
    for x in [1, 2, 3]: print x, 1 2 3 迭代

        5.Python列表截取(切片操作)

             分片使用2个冒号分隔的3个数字来完成:[start:end:step],start:end表示从哪里切到哪里,比如创建一个列表[1,5,7,8,10],切片操作[1:3],就表示从列表的第1位截取到第三位,切片后列表为[5,7,8]。step表示要切的步长,如果step为2,切出来的列表就是[5,8]。

    L = ['cdx', 'Red', 'molly']
    print(L[2])
    >>>'molly'
    print(L[-2])
    >>>"Red"
    print(L[1:])
    >>>['Red', 'molly']

     注意:列表里 a 与 a[:] 不同。可以通过函数 id() 查看。简单来说,a[:] 是创建 a 的一个副本

    4.Python列表函数&方法

    Python包含以下函数:

    序号 函数
    1 cmp(list1, list2)
    比较两个列表的元素
    2 len(list)
    列表元素个数
    3 max(list)
    返回列表元素最大值
    4 min(list)
    返回列表元素最小值
    5 list(seq)
    将元组转换为列表

    Python包含以下方法:

     

    序号 方法
    1 list.append(obj)
    在列表末尾添加新的对象
    2 list.count(obj)
    统计某个元素在列表中出现的次数
    3 list.extend(seq)
    在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
    4 list.index(obj)
    从列表中找出某个值第一个匹配项的索引位置
    5 list.insert(index, obj)
    将对象插入列表
    6 list.pop([index=-1])
    移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
    7 list.remove(obj)
    移除列表中某个值的第一个匹配项
    8 list.reverse()
    反向列表中元素
    9 list.sort(cmp=None, key=None, reverse=False)
    对原列表进行排序

    4.Python列表补充的一些高级用法及操作

    1.Python创建二维列表(一个大列表里嵌套许多一维列表为二维列表),在这里给大家普及高级用法,列表推导式。

    列表推导式:快速生成一个列表的方法,从右向左看,循环语句执行完后,返回i到列表,看不懂没关系,后面博主讲完高级Python你就懂了。

    #列表推导式用法
    #if写在前面
    c = [i if i%2==0 else 1 for i in a]  //遍历a的每个元素,如果i为偶数直接返回,否则直接返回1。此处if写在for前面要求必须有else项
    a = [1,2,3]
    c = [i if i%2==0 else 1 for i in a]
    print(c)
    >>>[1, 2, 1]
    #if语句写在末尾
    a = [1,2,3]
    c = [i for i in a if i%2==0]#if条件在末尾,只筛选出符合条件的数字
    print(c)
    >>>[2]

    二维列表创建:

    #方法1是直接定义二维列表
    list1 = [[0, 0, 0, 0, 0, 3, 5], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 7], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
    #方法2是使用列表推导式
    list2= [ [0 for i in range(5)] for i in range(5)]
    print(list)
    >>>[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

    2.将列表中的所有元素组合成字符串

    "".join()操作,此操作可以将列表中的元素取出并组合成字符串。括号里的参数是列表名。""引号中传入的是以何种字符连接。

    a = ["cdx","is","Redmolly"]
    print(" ".join(a))
    >>>cdx is Redmolly
    print("-".join(a))
    >>>cdx-is-Redmolly

    3.查找列表中频率最高的值

    需要用到Python标准库——collections模块的Counter类,Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。这里不懂真没关系,等你看完字典和模块和类就懂了。

    Counter的创建:

    c = Counter()  # 创建一个空的Counter类
    c = Counter('gallahad')  # 从一个可iterable对象(list、tuple、dict、字符串等)创建
    c = Counter({'a': 4, 'b': 2})  # 从一个字典对象创建
    c = Counter(a=4, b=2)  # 从一组键值对创建

    计数值访问:

    c = Counter("abcdefgab")
    print(c["a"])
    >>>2
    print(c["c"])
    >>>1

    Counter类中的most_common([n])方法:返回一个TopN列表。如果n没有被指定,则返回所有元素。当多个元素计数值相同时,排列是无确定顺序的。(看例子就懂)

    c = Counter('abracadabra')
    print(c.most_common())
    >>>[('a', 5), ('r', 2), ('b', 2), ('c', 1), ('d', 1)]
    print(c.most_common(3))#返回前三个键值对
    >>>[('a', 5), ('r', 2), ('b', 2)]

    查找列表中频率最高的值:

    利用collections.Counter类
    words = ['look', 'into', 'my', 'eyes', 'look', 'into',
    'my', 'eyes', 'the', 'eye', 'the', 'eyes', 'not',
    'around', 'the', 'eyes', "don't", 'look', 'around',
    'the', 'eyes', 'look', 'into', 'my', 'eyes', "you're",
     'under']
    from collections import Counter
    word_counts = Counter(words)
    print(word_counts.most_common(3))
    >>>[('eyes', 6), ('look', 4), ('the', 4)]

    4.复制列表

    copy函数:复制一个列表,用法如下:

    name = ["red","molly"]
    name_copy = names.copy()
    print(name,name_copy)
    >>>["red","molly"]["red","molly"]

    5.移除列表重复项(只讲最简单的Python原生方法,其他的需要你自己动脑筋)

    方法1,利用python中集合元素唯一性特点,将列表转为集合,将转为列表返回:

    这里简单介绍下集合,明天再详细讲Python集合:集合(set)是一个无序不重复元素的序列。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

    创建集合:

    #法1创建
    parame = {value01,value02,...}
    #法2创建
    set(value)

    移除列表重复项:

    def deleteDuplicated(listA):
        return sorted(set(listA),key = listA.index)
    listA = deleteDuplicated([3,5,3,4,7])
    print(listA)

    6.查询N维列表的所有项(这个的难度在于,你要搞懂内嵌列表的索引)

     

    moves = ["冰雪奇缘","变形金刚",["公主","擎天柱",["王子","威震天"]]]
    def print_lol(the_list):
        for each_item in the_list:
            if isinstance(each_item,list):
                print_lol(each_item)
            else:
                print(each_item)
    print_lol(moves)

     

     


     

    PS(高级内容看不懂没关系,之后退回来看就好了,关于序列类型的相互转换,等介绍完所有的序列类型后再来总结!一定要自己自己敲代码啊)

     

     

     

     

     

     

     

     

     

     

     

关键字