• Python 列表切片


    想必很多人都使用过列表的切片,通过切片可以从列表中获取一个或多个元素,但你真的了解切片?

    一、一般玩法

    >>> name = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
    >>> name[0:2]		# 获取 0 - 2 中间的元素,不包括索引为 2 的元素
    ['a', 'b']
    
    >>> name[:2]		# 从 0 开始切,可省略 0
    ['a', 'b']
    
    >>> name[1:]		# 同样地,切到最后一个也可以省略最后的元素索引
    ['b', 'c', 'd', 'e', 'f', 'g', 'h']
    

    二、列表步长

    列表切片实际上还可以接收第三个参数:步长(默认情况为 1),来试试将其改为 2 会有说明变化?

    >>> name[1:6:2]		# 每隔 2 个元素才取出一个来
    ['b', 'd', 'f']
    
    >>> name[::2]		# 如果是从头到尾切,还可以写成这样
    ['a', 'c', 'e', 'g']
    	
    >>> name[::-1]		# 同样地,步长还可以是负数,当步长为 -1 时,相当于复制一个反转的列表
    ['h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']
    
    >>> name[::-2]
    ['h', 'f', 'd', 'b']
    

    容易出错的地方:

    >>> name[7:2:-2]	# 相当于从索引为 7 到 索引为 2 中,每隔 2 各元素取一个出来
    ['h', 'f', 'd']
    
    >>> name[10:2:-2]	# 对于超出索引的,默认是从最后一个元素开始取
    ['h', 'f', 'd']
    
    >>> name[100:2:-2]
    ['h', 'f', 'd']
    

    三、列表深浅拷贝

    浅拷贝

    >>> A = name[:]    
    >>> id(A)          
    2004289344072      
    

    深拷贝

    >>> B = name   
    >>> id(B)          
    2004289245384  
    
    >>> id(name)       
    2004289245384 
    

    原理透析

    Python 的变量就像一个 标签,或者说是一个名字,它通过指针指向元素值,可以理解为下图所示:

    深拷贝指向原来的值,两者 ID一致,浅拷贝是从原来的值上复制一个副本出来。

    四、面试题

    1、列表 l = [1, 2, 3, 4, 5, 6, 7, 8, 9],那么 print(l[10:3:-2]) 为多少?

    >>> l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> print(l[10:3:-2])
    [9, 7, 5]
    

    2、输出值

    A = 'apple'
    B = A
    B = 'banana'
    print(A)
    

    A 为字符串,是不可变类型,因此 A 的值始终不变,为:'apple'

    3、输出值

    A = ['apple']
    B = A
    B[0] = 'banana'
    print(A)
    

    = 是深拷贝,两者 ID 也相同,修改 B 会影响 A,修改 A 会影响 B,所以结果为: ['banana']

    4、输出值

    A = ['apple']
    B = A[:]
    B[0] = 'banana'
    print(A)
    
    

    [:] 是浅拷贝,只拷贝了第一层,修改不会有影响,所以结果为:['apple']

  • 相关阅读:
    Circular dependency issuse on cocoapods version(0.36.0) 全然解决方式(非降版本号)
    Android Studio经常使用配置及使用技巧(二)
    poj 2195 Going Home(最小费最大流)
    OpenFace库(Tadas Baltrusaitis)中基于Haar Cascade Classifiers进行人脸检測的測试代码
    Divisibility by Eight
    hdu 5055(坑)
    微服务(Microservices)
    mysql 运行计划explain具体解释
    URAL 题目1297. Palindrome(后缀数组+RMQ求最长回文子串)
    Windows下将nginx安装为服务运行
  • 原文地址:https://www.cnblogs.com/midworld/p/11380239.html
Copyright © 2020-2023  润新知