数据类型之列表

一、列表简介:

  序列是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]