• Python08:列表


    列表:python中以[]表示一个列表,取其中一个值是变量名[n]n是代表列表中的下标值。

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


    names = ["One","Two","Three","four"]
    print(names)

    输出:

    ['One', 'Two', 'Three', 'four']

    Process finished with exit code 0

    解释:

    names = ["One","Two","Three","four"]:定义列表变量names,并设定names的值

    print(names):打印变量names

    操作:

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


    names = ["One","Two","Three","four"]
    print(names[2])

    输出:

    Three

    Process finished with exit code 0

    解释:

    print(names[2]):查询下标为2的元素(下标从0开始)。

    切片操作:

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


    names = ["One","Two","Three","four"]
    print(names[1:2])

    输出:

    ['Two']

    Process finished with exit code 0

    解释:

    print(names[1:2]):切片操作,起始位置为1,终止位置为2,包含起始而不包含终止位置。

    查询操作:

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


    names = ["One","Two","Three","four"]
    print(names[-1])

    输出:

    four

    Process finished with exit code 0

    解释:

    print(names[-1]):查询最后一个元素。

    切片操作:

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


    names = ["One","Two","Three","four"]
    print(names[-1:-3])

    输出:

    []

    Process finished with exit code 0

    解释:

    print(names[-1:-3]):错误的切片操作,起始位置要在终止位置的前边,故输出为空。

    切片操作:

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


    names = ["One","Two","Three","four"]
    print(names[-3:-1])

    输出:

    ['Two', 'Three']

    Process finished with exit code 0

    解释:

    print(names[-3:-1]):同上一步比较,这个是正常的用负数作切片查询操作。

    切片操作:

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


    names = ["One","Two","Three","four"]
    print(names[-2:])

    输出:

    ['Three', 'four']

    Process finished with exit code 0

    解释:

    print(names[-2:]):最后一位参数为空,则取到列表最后,此时包含最后一位元素。

    切片操作:

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


    names = ["One","Two","Three","four"]
    print(names[0:3])
    print(names[:3])

    输出:

    ['One', 'Two', 'Three']

    ['One', 'Two', 'Three']

    Process finished with exit code 0

    解释:
    print(names[:3]):如果起始索引不写,则从0开始查找,同print(names[0:3])一样的结果。

    添加操作:

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


    names = ["One","Two","Three","four"]
    names.append("LeiMing")
    print(names)

    输出:

    ['One', 'Two', 'Three', 'four', 'LeiMing']

    Process finished with exit code 0

    解释:

    names.append("LeiMing"):向列表最后追加元素。

    添加操作:

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


    names = ["One","Two","Three","four"]
    names.insert(1,"Buck")
    print(names)

    输出:

    ['One', 'Buck', 'Two', 'Three', 'four']

    Process finished with exit code 0

    解释:

    names.insert(1,"Buck"):向指定位置添加元素,第一个参数是下标位置,第二个参数是添加的值。

    修改操作:

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


    names = ["One","Two","Three","four"]
    names[2] = "Join"
    print(names)

    输出:

    ['One', 'Two', 'Join', 'four']

    Process finished with exit code 0

    解释:

    names[2] = "Join":元素的修改,找到修改的下标,直接赋值。

    删除操作:

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


    names = ["One","Two","Three","four"]
    names.remove("Three")
    print(names)

    输出:

    ['One', 'Two', 'four']

    Process finished with exit code 0

    解释:

    names.remove("Three"):删除元素,参数填写要删除的值,直接删除。

    删除操作:

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


    names = ["One","Two","Three","four"]
    del names[1]
    print(names)

    输出:

    ['One', 'Three', 'four']

    Process finished with exit code

    解释:

    del names[1]:删除下标为1的元素。

    删除操作:

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


    names = ["One","Two","Three","four"]
    names.pop()
    print(names)

    输出:

    ['One', 'Two', 'Three']

    Process finished with exit code 0

    解释:

    names.pop():删除操作,不写参数默认删除最后一位元素。

    删除操作:

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


    names = ["One","Two","Three","four"]
    names.pop(1)
    print(names)

    输出:

    ['One', 'Three', 'four']

    Process finished with exit code 0

    解释:

    names.pop(1):删除元素,填写数字,删除对应的下标的元素。

    操作:

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


    names = ["One","Two","Three","four"]
    print(names.index("Two"))

    输出:

    1

    Process finished with exit code 0

    解释:

    print(names.index("Two")):查询列表中元素是”Two”的下标。

    方法操作:

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


    names = ["One","Two","Three","four","Two","Two"]
    print(names.count("Two"))

    输出:

    3

    Process finished with exit code 0

    解释:

    print(names.count("Two")):统计元素个数,此次统计为”Two”的元素个数。

    方法操作:

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


    names = ["One","Two","Three","four"]
    names.reverse()
    print(names)

    输出:

    ['four', 'Three', 'Two', 'One']

    Process finished with exit code 0

    解释:

    names.reverse():反转列表中的元素。

    方法操作:

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


    names = ["One","2Two","#Three","four"]
    names.sort()
    print(names)

    输出:

    ['#Three', '2Two', 'One', 'four']

    Process finished with exit code 0

    解释:

    names.sort():给列表中的元素排序,默认原则是以ASCII码的顺序,特殊字符、数字、大写字母、小写字母常见的。

    方法操作:

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


    names = ["One","2Two","#Three","four"]
    names.clear()
    print(names)

    输出:

    []

    Process finished with exit code 0

    解释:

    names.clear():清空列表。

    方法操作:

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


    names = ["One","2Two","#Three","four"]
    names2 = ["HanMei","LiLei","FengHua"]
    names.extend(names2)
    print(names)
    print(names2)

    输出:

    ['One', '2Two', '#Three', 'four', 'HanMei', 'LiLei', 'FengHua']

    ['HanMei', 'LiLei', 'FengHua']

    Process finished with exit code 0

    解释:

    names.extend(names2):将列表names2追加到names

    方法操作:

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


    names = ["One","2Two","#Three","four"]
    names2 = ["HanMei","LiLei","FengHua"]
    del names2
    print(names)
    print(names2)

    输出:

    ['One', '2Two', '#Three', 'four']

    Traceback (most recent call last):

      File "E:/python_code/s14/day2/names.py", line 10, in <module>

        print(names2)

    NameError: name 'names2' is not defined

    Process finished with exit code 1

    解释:

    del names2:删除names2,打印列表names2的时候报错,因为已删除。

    浅拷贝方法操作:

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


    names = ["One","Two","Three","Four","Five"]
    names2 = names.copy()

    print(names)
    print(names2)

    输出:

    ['One', 'Two', 'Three', 'Four', 'Five']

    ['One', 'Two', 'Three', 'Four', 'Five']

    Process finished with exit code 0

    解释:

    names2 = names.copy():列表的拷贝,此方法是浅拷贝,何为浅拷贝,参考后边讲解。

    浅拷贝方法操作:

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


    names = ["One","Two","Three","Four","Five",["JACK","ROSE"]]
    names2 = names.copy()
    names2[2] = "mclind"
    names2[5][0] = "jack"

    print(names)
    print(names2)

    输出:

    ['One', 'Two', 'Three', 'Four', 'Five', ['jack', 'ROSE']]

    ['One', 'Two', 'mclind', 'Four', 'Five', ['jack', 'ROSE']]

    Process finished with exit code 0

    解释:

    可以看到,拷贝完列表,当改变names2当中的字符串时,只改变names2中的字符串,names当中的字符串不变,当改变names2列表当中的列表时,names当中的列表也跟着变化了。这是因为在浅复制当中,复制的是地址,并不是新创建了地址空间。字符串的是无法改变的(要想修改指向的字符串,变量名看起来不变,其实是新创建了一个字符串,变量名指向了新创建的字符串的地址,变量的值也就跟着变化了,而原来字符串的地址是不变的),所以names[2]指向的是字符串, 修改names[2]是指向了新的地址,而names没有修改,地址不变,值不受影响。当修改names[5][0]的时候,修改的是列表中列表,而列表中的列表的地址并没有改变,由于names[5]指向的地址没有改变,但names2修改了其中的内容,所以names指向的地址的内容也变化了,所以names2[5][0]的修改也影响了names的内容。

    用指针更容易理解和解释,但python中并没有指针的概念。

    浅拷贝还有别的方法:names2=copy.copy(names) 注:需导入copy模块。

                        names2=names[:]

                        names2=list(names)三种结果一样,浅拷贝。

    深复制方法操作:

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

    import copy

    names = ["One","Two","Three","Four","Five",["JACK","ROSE"]]
    names2 = copy.deepcopy(names)
    names2[2] = "mclind"
    names2[5][0] = "jack"

    print(names)
    print(names2)

    输出:

    ['One', 'Two', 'Three', 'Four', 'Five', ['JACK', 'ROSE']]

    ['One', 'Two', 'mclind', 'Four', 'Five', ['jack', 'ROSE']]

    Process finished with exit code 0

    解释:

    names2 = copy.deepcopy(names):导入copy模块,再使用深拷贝方法deepcopy(),深拷贝是完全独立的复制出来列表,开辟新的内存空间,一般不使用。

    for循环的别样操作:

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


    names = ["One","Two","Three","Four","Five",["JACK","ROSE"]]
    for i in names:
        print(i)

    输出:

    One

    Two

    Three

    Four

    Five

    ['JACK', 'ROSE']

    Process finished with exit code 0

    解释:

    遍历列表中的元素,然后打印出来。这时候也可以用步长切片。

  • 相关阅读:
    唯一索引 && 主键索引
    部分函数依赖 && 完全函数依赖
    范式
    BST树、B树、B+树、B*树
    哈希表
    Bzoj4569: [Scoi2016]萌萌哒
    Bzoj 4551: [Tjoi2016&Heoi2016]树
    Bzoj3631: [JLOI2014]松鼠的新家
    HDU4746: Mophues
    BZOJ2820:YY的GCD
  • 原文地址:https://www.cnblogs.com/mclind/p/8715189.html
Copyright © 2020-2023  润新知