Python之列表常用方法

列表List定义初始化:

    list()->new empty list
    list(iterable)->new list initialized from iterable’s items
    列表不能一开始就定义大小

    lst = list() --》 lst = lsit(range(5))
    lst = [] --》 lst = [2,6,8,9,‘ab’]

列表常用方法实例:

列表索引访问:
  1. 索引,也叫下标
  2. 正索引:从左到右,从0开始,为列表中每一个元素编号
  3. 负索引:从右到左,从-1开始
  4. 正负索引不可以超界,否则引发异常Indexerror 为了理解方便,可以把列表理解为从左到右排列,头部是左,尾部是右,上界是右,下界是左
列表通过索引访问:

    list[index] ,index就是索引,使用中括号访问

示例:
lst = ['sdfg',0, 1, 200, 1, 0, 700]
lst[1]
0
列表查询(要学会内存模型):

    index(value,[start,[stop]])(一般不建议使用,效率低)
    通过值value,从指定区间查找列表的元素是否匹配
    匹配第一个就立即返回索引
    匹配不到,抛出异常ValueError

index和count方法都是O(n) n=列表里所有的元素
    随着列表数据规模的增大,而效率下降

示例:
lst.index(0)
2
count(value)

    返回列表中匹配value的次数
    时间复杂度

示例:
lst.count('sdfg')
1
insert(index,object)->None

    在指定的索引index处插入元素object
    返回None就意味着没有新的列表产生,就地修改
    时间复杂度O(n)
    索引能超上下界:
        超越上界,尾部追加
        超越下界,头部追加

示例:
lst.insert(-1000,'abcc')
['abcc','sdfg'0, 1, 200, 1, 0, 700]
len(list)返回元素的个数

    len不需要遍历所有相当于windows里面的属性

示例:
lst = ['abcc','sdfg',0, 1, 200, 1, 0, 700]
len(lst)
8
index

    list[index] = value(给几号元素重新赋值)
    索引不要超界

示例:
lst = ['abcc','sdfg',0, 1, 200, 1, 0, 700]
lst[0] = 'C'
['C', 'sdfg', 0, 1, 200, 1, 0, 700]

列表增加、插入元素

append(object)->None
    列表尾部追加元素,返回None
    返回None就意味着没有新的列表产生,就地修改
    时间复杂度O(1)

示例:
lst = ['abcc','sdfg',0, 1, 200, 1, 0, 700]
lst.append('ddd')
['abcc', 'sdfg', 0, 1, 200, 1, 0, 700, 'ddd']
extend(iteratable)->None

    将可迭代对象的元素追加进来,返回None
    就地修改

示例:
lst.extend(range(5))
['abcc', 'sdfg', 0, 1, 200, 1, 0, 700, 'ddd', 0, 1, 2, 3, 4]
+ ->list

    连接操作,将两个列表连接起来
    产生新的列表,原列表不变
    本质上调用的是_add_()方法

示例:
a = []
a.extend(range(5))
[0, 1, 2, 3, 4]
a+lst
[0, 1, 2, 3, 4, 'abcc', 'sdfg', 0, 1, 200, 1, 0, 700, 'ddd', 0, 1, 2, 3, 4]
*->list

    重复操作,将本列表元素重复n次,返回新的列表

示例:
x = [['a','b','c','d']]*3
[['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'd']]
x[0][0] = 'h'
[['h', 'b', 'c', 'd'], ['h', 'b', 'c', 'd'], ['h', 'b', 'c', 'd']]
原理:

在这里插入图片描述

  • list的*实际上指向的是同一地址,并不是开辟了新的内存地址

列表删除元素:

remove(value)->None

    从左到右查找第一个匹配value的值,移除该元素,返回None
    就地修改
    效率O(n)

示例:
lst = ['abcc', 'sdfg', 0, 1, 200, 1, 0, 700, 'ddd', 0, 1, 2, 3, 4]
lst.remove('abcc')
['sdfg', 0, 1, 200, 1, 0, 700, 'ddd', 0, 1, 2, 3, 4]
pop([index])->item

    不指定索引index,就从列表尾部弹出一个元素
    指定索引index,就从索引处弹出一个元素,索引超界抛出IndexError错误

示例:
lst = ['abcc', 'sdfg', 0, 1, 200, 1, 0, 700, 'ddd', 0, 1, 2, 3, 4]
lst.pop(1)
['abcc', 0, 1, 200, 1, 0, 700, 'ddd', 0, 1, 2, 3, 4]
lst.pop()
4
lst
['abcc', 0, 1, 200, 1, 0, 700, 'ddd', 0, 1, 2, 3,]
clear()->None(轻易不要用,会清楚所有数据,大量元素引用计数为0时,会引发频繁GC)

    清楚列表所有元素,剩下一个空列表

示例:
lst = ['abcc', 'sdfg', 0, 1, 200, 1, 0, 700, 'ddd', 0, 1, 2, 3, 4]
lst.clear()
[]
reverse()->None

    将列表元素反转,返回None
    就地修改(没有创建新的列表,反转后创建一个可迭代对象)

示例:
lst.reverse()
[4, 3, 2, 1, 0, 'ddd', 700, 0, 1, 200, 1, 0, 'sdfg', 'abcc']

in

    [3,4]in[1,2,[3,4]]
    for x in [1,2,3,4]

示例:
[3,4]in[1,2,[3,4]]
True

reversed() 是一个反转用的内建函数(迭代器就是可迭代对象)reversed返回可迭代对象(不是就地修改),一般用作for后面因为直接可以从

示例:
a = [i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in reversed(a):
    print(i)
9
8
7
6
5
4
3
2
1
0

列表排序

sort(key=None,reverse=False)->None

    对列表元素进行排序,就地修改,默认升序
    reverse为True,反转,降序
    key一个函数,指定key如何排序
    lst.sort(key=functionname)
    #sort后面的填写key,如果不写key则默认是自己的类型
    #排序时所有元素都要同类型

示例:
b = [669,560,70,20,324,6,7,4,23]
b.sort()
b
[4, 6, 7, 20, 23, 70, 324, 560, 669]

sorted(内建函数)对某一个可迭代对象进行排序,然后返回一个新的列表。

    sorted(lst,key=str)
    用内建函数的sorted排序不影响之前的可迭代对象用.sort排序会直接修改列表

示例:
sorted(b)
[4, 6, 7, 20, 23, 70, 324, 560, 669]
b
[669, 560, 70, 20, 324, 6, 7, 4, 23]

copy()->List

    shadow copy返回一个新的列表
    影子拷贝,也叫浅拷贝,遇到引用类型,只是复制了一个引用而已

示例:
lst1 = list(range(5))
lst2 = lst1.copy()
print(lst1 == lst2)
True
lst2[0]=10
print(lst1 == lst2)
False
  • 乘法(*)和拷贝(.copy)方法,都是用浅拷贝。浅拷贝遇到引用类型的时候它只是把门牌号码(地址)拷贝过来而已。复杂类型只是复制的地址而已。

深拷贝

    copy模块提供了deepcopy

示例:
from copy import deepcopy
lst0 = [1,[2,3,4],5]
lst5 = copy.deepcopy(lst0)
lst5[1][1] = 20
lst5 == lst0		
Flase

猜你喜欢

转载自blog.csdn.net/qq_35976427/article/details/88901861