python 列表(List)

发布时间:2018-02-23 10:13:57编辑:admin阅读(3466)

    Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。

    每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。可以进行的操作包括索引,切片,加,乘,检查成员。


    切片

    举个例子:

    有一堆明星列表,我需要取第一个

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    print(names[0])

    执行输出 chenglong

    那么这个0,是代表什么呢?

    0代表,chenlong在这个列表中,从左到右开始,第一个的位置。在数据存储中,不是从1开始算,而是从0开始计算。

    为什么从0开始呢?因为二进制就是从0开始的。


    如果要取中间2个呢?

    print(names[1:3])

    执行输出:

    ['fanbingbing', 'zhaowei']

    语法: 

    [起始位置:结束位置]

    结果输出,不包括结束位置。通俗来讲,就是顾头不顾尾

    这个方法,可以取一连串的数据。

    这个动作,叫做切片


    取最后2个

    我们不能写-2:-0  0是可以省略的,写成-2: 即可


    print(names[-2:])

    执行输出

    ['zhaowei', 'lilianjie']


    取前3个

    可以写出0:3 由于0可以省略,所以:3 表示前3个

    print(names[:3])

    执行输出

    ['chenlong', 'fanbingbing', 'zhaowei']


    每隔2个切一个

    print(names[0:-1:2])

    也可以写成

    print(names[::2])

    执行输出

    ['chenlong', 'zhaowei']


    第3个参数,是间隔的意思。起始索引 0,输出chenlong。 0,1,2...  间隔2个,索引为2,输出zhaowei



    增加

    现在需要增加一个人leijun,需要使用append()方法

    append是追加的意思,插入到最后一个元素

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    names.append("leijun")
    print(names)

    执行输出

    ['chenlong', 'fanbingbing', 'zhaowei', 'lilianjie', 'leijun']


    插入

    增加一个人mayun,必须在fanbingbing的前面,需要使用insert()方法

    语法: insert(索引,值)

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    names.append("leijun")
    names.insert(1,"mayun")
    print(names)

    fanbingbing的索引为1

    执行输出

    ['chenlong', 'mayun', 'fanbingbing', 'zhaowei', 'lilianjie', 'leijun']


    修改

    现在需要把fanbingbing改成libingbing

    直接取出元素,赋值即可

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    names[1] = "libingbing"
    print(names)

    执行输出

    ['chenlong', 'libingbing', 'zhaowei', 'lilianjie']


    删除

    需要把chenlong删除

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    names.remove("chenlong")
    print(names)

    执行输出

    ['fanbingbing', 'zhaowei', 'lilianjie']


    还有一种方法方法,也可以删除

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    del names[0]
    print(names)


    最后,还有一种方法,也可以删除

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    names.pop(0)
    print(names)

    pop() 里面,可以接一个索引。用来删除指定的元素

    默认不带参数,是删除最后一个元素


    查询

    查询指定元素的索引

    比如列表元素,比较多。一个个数,比较累。可以使用index()方法

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    print(names.index("zhaowei"))

    执行输出 2


    有了元素的索引,就可以输出元素的值了。

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    print(names[names.index("zhaowei")])

    执行输出zhaowei


    统计

    统计lilianjie有多少个

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    print(names.count("lilianjie"))

    执行输出 1


    清空

    clear()方法会清空所有元素

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    names.clear()
    print(names)

    执行输出 []


    反转

    reverse() 会将元素的索引重新排列,从右向左颠倒

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    names.reverse()
    print(names)

    执行输出

    ['lilianjie', 'zhaowei', 'fanbingbing', 'chenlong']


    排序

    sort() 默认是升序

    字母,安装字母顺序排序

    数字,从大到小排序

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    names.sort()
    print(names)

    执行输出

    ['chenlong', 'fanbingbing', 'lilianjie', 'zhaowei']


    如果是数字、字母、符号混合呢?

    names = ["3chenlong","!fanbingbing","Zhaowei","lilianjie"]
    names.sort()
    print(names)

    执行输出

    ['!fanbingbing', '3chenlong', 'Zhaowei', 'lilianjie']

    那么优先级就是 符号、数字、字母大写、字母小写

    这个排序规则,是安装ASCII码排序规则来的。


    复制

    复制整个列表

    names = ["chenlong","fanbingbing","zhaowei","lilianjie"]
    names2 = names.copy()
    print(names)
    print(names2)

    执行输出

    ['chenlong', 'fanbingbing', 'zhaowei', 'lilianjie']

    ['chenlong', 'fanbingbing', 'zhaowei', 'lilianjie']


    复制列表中带列表的数据

    names = ["chenlong",["angelababy","yangyin"],"zhaowei","lilianjie"]
    names2 = names.copy()
    #修改列表中的第1个列表中的元素
    names[1][0] = "Angelababy"
    print(names)
    print(names2)

    执行输出

    ['chenlong', ['Angelababy', 'yangyin'], 'zhaowei', 'lilianjie']

    ['chenlong', ['Angelababy', 'yangyin'], 'zhaowei', 'lilianjie']

    为什么结果是一样的呢?明明只改了names,为什么names2也是一样的?
    因为copy()是浅copy。它只会拷贝第一层,列表中包含列表,这个就属于第二层。为什么没拷贝呢?它是由内存存储方式决定的。一个列表,是一个内存指针(地址),copy的时候,只拷贝了内存地址。那么当内存地址的内容发生变化时,读取指针的时候,也会读取更新的内容。


    实现浅copy,还有3种方式

    #!/usr/bin/env python
    # coding: utf-8
    __author__ = 'www.py3study.com'

    import copy

    names = ["chenlong",["angelababy","yangyin"],"zhaowei","lilianjie"]
    names2 = copy.copy(names)
    names2 = names[:]
    names2 = list(names)

    第一种方式,用了copy模块

    第二种方式,遍历了列表

    第三种方式,用赋值的方式。


    浅copy貌似没啥用,但是在创建联合账号的时候,就会用到,举个例子:

    #!/usr/bin/env python
    # coding: utf-8
    __author__ = 'www.py3study.com'

    #共同银行账户,有100万
    person = ["name",["money",100]]
    #丈夫和妻子共同持有
    husband = person[:]
    wife = person[:]
    #声明丈夫和妻子的名字
    husband[0] = "huangxiaoming"
    wife[0] = "Angelababy"
    #丈夫花了50万,卡里还剩50万
    husband[1][1] = 50
    #查询账户余额
    print(husband)
    print(wife)

    执行输出

    ['huangxiaoming', ['money', 50]]

    ['Angelababy', ['money', 50]]


    如果想要深copy呢?需要用到一个模块copy

    #!/usr/bin/env python
    # coding: utf-8
    __author__ = 'www.py3study.com'

    import copy

    names = ["chenlong",["angelababy","yangyin"],"zhaowei","lilianjie"]
    #deepcopy 深copy
    names2 = copy.deepcopy(names)
    names[1][0] = "Angelababy"
    print(names)
    print(names2)

    执行输出

    ['chenlong', ['Angelababy', 'yangyin'], 'zhaowei', 'lilianjie']

    ['chenlong', ['angelababy', 'yangyin'], 'zhaowei', 'lilianjie']


    遍历

    遍历列表中的每一个元素,需要用到for循环

    names = ["chenlong",["angelababy","yangyin"],"zhaowei","lilianjie"]
    for i in names:
       print(i)

    执行输出

    chenlong

    ['angelababy', 'yangyin']

    zhaowei

    lilianjie


关键字

上一篇: python 入门知识拾遗

下一篇: python 元组