• 数据类型之列表


    一、列表简介:

      序列是Python中最基本的数据结构。序列中的每个元素都索引,第一个索引是0,

    以逗号作为分割符。

    二、列表的方法:

    0、创建列表:
        names = ['a','b','c','d']
    1、追加:names.append()
        >>> names.append('e')
        >>> names
        ['a', 'b', 'c', 'd', 'e']
    2、删除:pop,remove,del
        1)pop()
        >>> names.pop()
        'e'
        如果没有指定下标,则默认会删除最后一个元素  
        >>> names.pop(2)
        'c'
        指定下标时,就会删除下标所对应的元素
        
        2)remove()
        >>> names.remove('e')
        >>> names
        ['a', 'b', 'c', 'd']
        
        3)del
        >>> del names[4]
        >>> names
        ['a', 'b', 'c', 'd']
    3、查找元素所在位置:index()
        >>> names.index('c')
        2
    4、统计元素的次数:count()
        >>> names.append('d')
        >>> names.count('d')
        2
    5、反转:reverse()
        >>> names.reverse()
        >>> names
        ['d', 'c', 'b', 'a']
    6、清空:clear()
        >>> names.clear()
        >>> names
        []
    7、插入:insert()
        >>> names.insert(2,'devilf')
        >>> names
        ['a', 'b', 'devilf', 'c', 'd']
        还有其他的插入方法:
        >>> names[3] = 'lebron'
        >>> names
        ['a', 'b', 'devilf', 'lebron', 'd']
    8、排序:sort()按照ascii码来进行排序
        >>> names.insert(4,'&&')
        >>> names
        ['a', 'b', 'd', 'devilf', '&&', 'lebron']
        >>> names.sort()
        >>> names
        ['&&', 'a', 'b', 'd', 'devilf', 'lebron']
    9、拼接两个列表:extend()
        >>> names.extend(place)
        >>> names
        ['&&', 'a', 'b', 'd', 'devilf', 'lebron', 'beijing', 'shandong', 'usa']
    10、对列表进行切片处理
        1)列出所有的元素
        >>> names[::]
        ['&&', 'a', 'b', 'd', 'devilf', 'lebron', 'beijing', 'shandong', 'usa']
    
        2)列出最后一个元素,从中间位置开始,列出后面所有的元素
        >>> names[-1]
        'usa'
        >>> a = int(len(names)/2)
        >>> names[a:]
        ['devilf', 'lebron', 'beijing', 'shandong', 'usa']
    11、复制:copy()
        >>> names.copy()
        ['&&', 'a', 'b', 'd', 'devilf', 'lebron', 'beijing', 'shandong', 'usa']

    三、深浅复制

    1.赋值:数据完全共享(= 赋值是在内存中指向同一个对象,如果是可变(mutable)类型,比如列表,修改其中一个,另一个必定改变
        示例:
            l1 = [1,5,'for']
            l2 = l1
            l1.append('while')
            print(l2)
        结果:
            [1, 5, 'for', 'while']
            
    2.浅复制:浅拷贝:数据半共享(复制其数据独立内存存放,但是只拷贝成功第一层)
        示例:
            l1 = [1,'for',['funtion','while']]
            l2 =copy.copy(l1)
            print(l2)
            l2[2][1] = 'True'
            print(l1)
        结果:
            [1, 'for', ['funtion', 'while']]
            [1, 'for', ['funtion', 'True']]
            如上代码,l2浅拷贝了l1 ,之后l2把其列表中的列表的元素给修改,从结果看出,l1也被修改了。但是仅仅修改l1列表中的第一层元素,却并没有影响l2。
            比较一下l2与l1的内存地址:False,说明,l2在内存中已经独立出一部分复制了l1的数据,但是只是浅拷贝,第二层的数据并没有拷贝成功,而是指向了l1中的第二层数据的内存地址,所以共享内存相当于等号赋值,所以就会有l2中第二层数据发生变化,l1中第二层数据也发生变化。
            
    3.深拷贝:数据完全不共享(复制其数据完完全全放独立的一个内存,完全拷贝,数据不共享)
        注:深拷贝就是完完全全复制了一份,且数据不会互相影响,因为内存不共享。

    四、列表去重

    方法一:
      用内置函数set:
    list1 = [1, 2, 3, 3, 4, 4, 5, 6, 6, 6, 7, 8, 9]
    list2 = list(set(list1))
    
    方法二:
      通过循环遍历
    list1 = [1, 2, 3, 3, 4, 4, 5, 6, 6, 6, 7, 8, 9]
    list2=[]
    for i in list1:
        if not i in list2:
            list2.append(i

      两种方法输出结果一致

    [1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 相关阅读:
    linux高可用集群(HA)原理详解
    【C#/WPF】修改图像的DPI、Resolution
    【C#】图像的变形/变换/扭曲。用Emgu或YLScsFreeTransform(FreeImageTransformation)或MagickImage
    【C#】遍历List列表的同时,移除访问到的元素
    【WPF】动态设置Binding的ConverterParameter转换器参数
    【SVN/Visual Studio】清除/更换AnkhSVN的用户登录信息
    【C#】允许泛型方法<T>返回空值Null
    【C#】时间日期格式转换:long和DateTime相互转换
    【C#/WPF】ListView的MVVM例子,及禁止拖动ListView的头部Header
    【C#/WPF】保存BitmapImage数据到文件中
  • 原文地址:https://www.cnblogs.com/feng0919/p/10053173.html
Copyright © 2020-2023  润新知