zoukankan      html  css  js  c++  java
  • python学习笔记之--列表

    列表:

    列表的顺序是固定的,可以用下标来访问(列表/元祖/字符串都可以用下标访问) 

    定义: a=[]

    #申明一个列表,用[]
    >>> list1=[1,2,3,4,5]
    >>> list2=['a','b','c','d']
    
    
    #访问列表的值,用下标index,index值从0开始
    >>> list1[2]
    3
    >>> list2[0]
    'a'
    
    
    列表的增删改查
    #
    append:在列表的末尾添加元素
    insert:在指定的位置添加元素
    extend:将可迭代对象指定的元素展开放到原列表中
    >>> list1.append(100) #在末尾添加元素 >>> list1 [1, 2, 3, 4, 5, 100] >>> list1.insert(0,2.5) #在指定位置添加元素 >>> list1 [2.5, 1, 2, 3, 4, 5, 100] >>> list1.extend(list2) >>> list1 [2.5, 1, 2, 3, 4, 5, 100, 'a', 'b', 'c', 'd']
    #改 >>> list1[1]='python' #重新按下标赋值 >>> list1 [2.5, 'python', 2, 3, 4, 5, 100, 'a', 'b', 'c', 'd'] >>>
    #查 >>> list1[3:8] #切片查 [3, 4, 5, 100, 'a'] >>> list1[-1] #坐标查 'd' >>> for i in list1: #按内容遍历查 ... print(i,end="") ... 2.5python2345100abcd >>> >>> for i in range(len(list1)): #按坐标遍历查 ... print(list1[i],end="") ... 2.5python2345100abcd>>> #删

    del a[0]:指定列表坐标删除元素
    a.remove():删除指定的元素
    a.clear():清空列表
    a.pop(index):不写index默认删除最后一个元素,而且会将删除的元素返回

    >>> list1.pop(-1)  #弹出删,pop(index),参数为下标;不填参数时:删除坐标最后位置的元素,并返回元素,返回值可以存到一个变量里
    'd'
    >>> list1
    [2.5, 'python', 2, 3, 4, 5, 100, 'a', 'b', 'c']
    >>> list1.pop(0)
    2.5
    >>> list1
    ['python', 2, 3, 4, 5, 100, 'a', 'b', 'c']
    >>> list1.remove(100)   #remove按值删,参数是列表里的值,删除的元素必须存在否则报错
    >>> list1
    ['python', 2, 3, 4, 5, 'a', 'b', 'c']
    

    >>> del list1[0]  #按坐标删
    >>> list1
    [2, 3, 4, 5, 'a', 'b', 'c']
    >>> del list1  #不填参数时,删除整个列表
    >>> list1
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    NameError: name 'list1' is not defined
    >>>

    目前我们有三种方法来倒序遍历一个List:
    1 . for x in reversed(array):
               print x
    2. for x in range(len(array)-1,-1,-1):
               print array[x]
    3. for x in array[::-1]:
               print x 

    Python列表脚本操作符

    列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。

    如下所示:

    Python 表达式结果描述
    len([1, 2, 3]) 3 长度
    [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] 组合
    ['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] 重复
    3 in [1, 2, 3] True 元素是否存在于列表中
    for x in [1, 2, 3]: print(x, end=" ") 1 2 3 迭代

    Python列表截取与拼接

    Python的列表截取与字符串操作类型,如下所示:

    L=['Google', 'Runoob', 'Taobao']

    操作:

    Python 表达式结果描述
    L[2] 'Taobao' 读取第三个元素
    L[-2] 'Runoob' 从右侧开始读取倒数第二个元素: count from the right
    L[1:] ['Runoob', 'Taobao'] 输出从第二个元素开始后的所有元素
    >>>L=['Google', 'Runoob', 'Taobao'] 
    >>> L[2] 'Taobao' 
    >>> L[-2] 'Runoob' 
    >>> L[1:] ['Runoob', 'Taobao']
    >>>

    列表还支持拼接操作:

    >>>squares = [1, 4, 9, 16, 25] 
    >>> squares += [36, 49, 64, 81, 100] 
    >>> squares [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] 
    >>>

    嵌套列表

    使用嵌套列表即在列表里创建其它列表,例如:

    >>>a = ['a', 'b', 'c'] 
    >>> n = [1, 2, 3] 
    >>> x = [a, n] 
    >>> x [['a', 'b', 'c'], [1, 2, 3]] 
    >>> x[0] ['a', 'b', 'c'] 
    >>> x[0][1] 'b'

    Python列表函数&方法

    Python包含以下函数:

    序号函数
    1 len(list)
    列表元素个数
    2 max(list)
    返回列表元素最大值
    3 min(list)
    返回列表元素最小值
    4 list(seq)
    将元组转换为列表

    >>> a=[1,2,1,2,3,3,3,3]
    >>> len(a)
    8
    >>> b =[2,4,6,8]
    >>> a+b
    [1, 2, 1, 2, 3, 3, 3, 3, 2, 4, 6, 8]
    >>> b*3
    [2, 4, 6, 8, 2, 4, 6, 8, 2, 4, 6, 8]
    >>> max(b)
    8
    >>> min(b)
    2
    >>>

    Python包含以下方法:

    序号方法
    1 list.append(obj)
    在列表末尾添加新的对象
    2 list.count(obj)
    统计某个元素在列表中出现的次数
    3 list.extend(seq)
    在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
    4 list.index(obj)
    从列表中找出某个值第一个匹配项的索引位置
    5 list.insert(index, obj)
    将对象插入列表
    6 list.pop([index=-1])
    移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
    7 list.remove(obj)
    移除列表中某个值的第一个匹配项
    8 list.reverse()
    反向列表中元素
    9 list.sort( key=None, reverse=False)
    对原列表进行排序
    10 list.clear()
    清空列表
    11 list.copy()
    复制列表

    count:统计某个元素在列表里出现的次数

    index:查看某个元素在列表中第一次出现的位置

    >>> a=[1,2,1,2,3,3,3,3]
    >>> a.count(2)
    2
    >>> a.count(3)
    4
    >>> a.index(2)
    1
    >>> a.index(3)
    4
    >>>

    多种方式复制列表:

    a[:], list(a), a*1, copy.copy(a)四种方式复制列表结果都可以得到一个新的列表

    >>> import copy
    >>> a=[[10],20]   #列表里包含可变元素,和不可变元素
    >>> b=a[:]
    >>> c=list(a)
    >>> d=a*1
    >>> e=copy.copy(a)
    >>> f=copy.deepcopy(a)
    >>> a.append(21)
    >>> a[0].append(11)
    >>> print(id(a),id(a[0]),a)
    66335752 66335112 [[10, 11], 20, 21]
    >>> print(id(d),id(b[0]),b)     
    66348872 66335112 [[10, 11], 20]  -----------切片得到的新列表:id(a)!=id(b),两个列表指向同一个内存地址,所以a,b互不影响;id(a[0]!=id(b[0])),列表里的可变元素指向同一个内存地址,所以b[0]会随a[0]的变化而变化
    >>> print(id(c),id(c[0]),c)    
    66349064 66335112 [[10, 11], 20]  -----------list得到的新列表:id(a)!=id(c),两个列表指向同一个内存地址,所以a,c互不影响;id(a[0]!=id(c[0])),列表里的可变元素指向同一个内存地址,所以c[0]会随a[0]的变化而变化
    >>> print(id(d),id(d[0]),d)     
    66348872 66335112 [[10, 11], 20]  -----------*得到的新列表:id(a)!=id(d),两个列表指向同一个内存地址,所以a,d互不影响;id(a[0]!=id(d[0])),列表里的可变元素指向同一个内存地址,所以d[0]会随a[0]的变化而变化
    >>> print(id(e),id(e[0]),e)     
    66790472 66335112 [[10, 11], 20]  -----------copy得到的新列表:id(a)!=id(e),两个列表指向不同的内存地址,所以a,e互不影响;id(a[0]=id(e[0])),列表里的可变元素指向同一个内存地址,所以e[0]会随a[0]的变化而变化
    >>> print(id(f),id(f[0]),f)
    66790664 66791880 [[10], 20]      -----------deepcopy复制得到的新列表:id(a)!=id(f),id(a[0]!=id(f[0])),列表和列表里的可变元素都指向的是两个不同的内存地址,所以不会随着a的变化而变化
    >>>

    总结:

    从以上可以看出,使用a[:],list(a),a*1,copy.copy(a)四种方式复制列表结果都可以得到一个新的列表,但是如果列表中含有
    列表,所以b,c,d,e新列表的子列表都是指引到同一个对象上。只有使用copy.deepcopy(a)方法得到的新列表
    f才是包括子列表在内的完全复制

  • 相关阅读:
    shell脚本中判断上一个命令是否执行成功
    nginx 414 Request-URI Too Large
    nginx 重写URL尾部斜杠
    Linux shell 日期,时间相关的命令
    shell脚本中自定义日志记录到文件
    scanf后面跟一个getchar
    1.Tarball软件make与makefile详解(还需要补充)
    <>和“”的区别
    malloc,calloc,realloc,alloc
    toString()方法细节
  • 原文地址:https://www.cnblogs.com/wenm1128/p/11572040.html
Copyright © 2011-2022 走看看