• Python 高级特性(1)- 切片


    前言

    面 tx 被问到 python 的高级特性相关,这里做个补充学习吧

    正向范围取值

    关键点

    • 首位下标是 0
    • 第一个数字是起始下标,第二个数字是结束下标(但最终结果不包含它)

    代码块一

    # 正向范围取值 - 字符串
    strs ="https://www.cnblogs.com/poloyy"
    
    # 从第 0 个下标开始取值,到第 1 个下标结束,但不会取第 1 个下标的元素,最终取的是 0 下标的值
    print(strs[0:1])
    
    # 从第 0 个下标开始取值,到第 10 个下标结束,但不会取第 10 个下标的元素,最终取的是 1,2,3,4,5,6,7,8,9 下标的值
    print(strs[0:10])
    
    # 从第 5 个下标开始取值,到第 10 个下标结束,但不会取第 10 个下标的元素,最终取的是 5,6,7,8,9 下标的值
    print(strs[5:10])
    
    # 从第 5 个下标开始取值,到第 100 个下标结束,但因为字符串最长就 30 个字符,所以会取到最后一个结束就结束了
    print(strs[5:100])
    
    # 相同数字返回空
    print(strs[5:5])
    
    # 第二个数字比第一个数字小,返回空
    print(strs[5:4])
    
    # 从第 0 个下班开始取值,取后面所有元素
    print(strs[0:])
    
    # 取前面 10 个元素
    print(strs[:10])

    运行结果

    h
    https://ww
    ://ww
    ://www.cnblogs.com/poloyy
    
    
    https://www.cnblogs.com/poloyy
    https://ww

    代码块二

    # 正向范围取值 - 数组
    lists = [1, 2, 3, 4, 5, 6, 7]
    
    print(lists[0:1])
    print(lists[0:10])
    print(lists[5:10])
    print(lists[5:100])
    print(lists[5:5])
    print(lists[5:4])

    运行结果

    [1]
    [1, 2, 3, 4, 5, 6, 7]
    [6, 7]
    [6, 7]
    []
    []

    反向范围取值

    关键点

    • 因为是反向,所以倒数的下标从 -1 算起
    • 第一个数字是起始下标,第二个数字是结束下标(但最终结果不包含它)
    • 第一个数字是负数情况下,第二个数字最大是 -1,如果写成 0 会返回空值

    代码块

    # 反向范围取值 - 字符串
    strs = "https://www.cnblogs.com/poloyy"
    
    # 取最后 10 个元素
    print(strs[-10:])
    
    # 取最后 6-10 的元素, 不会取到倒数第五个元素
    print(strs[-10:-5])
    
    # 反向范围取值 - 列表
    lists = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    # 取最后 6 个元素
    print(lists[-6:])
    
    # 取最后 5 个元素, 但不会取到倒数第 1 个元素
    print(lists[-5:-1])
    
    # 第二个值写0,返回空值
    print(lists[-10:0])
    
    # 正数+复数组合
    print(lists[1:-5])

    运行结果

    com/poloyy
    com/p
    [5, 6, 7, 8, 9, 10]
    [6, 7, 8, 9]
    []
    [2, 3, 4, 5]

    [:] 复制对象

    代码块

    # [:]
    lists1 = [1, 2, 3, 4, 5]
    lists2 = lists1
    lists1.append(6)
    print(lists1, lists2, id(lists1), id(lists2))
    
    lists1 = [1, 2, 3, 4, 5]
    lists2 = lists1[:]
    lists1.append(6)
    print(lists1, lists2, id(lists1), id(lists2))
    
    lists1 = [1, 2, 3, 4, 5, [1, 2, 3]]
    lists2 = lists1
    lists1[5].append(4)
    print(lists1, lists2, id(lists1), id(lists2))
    
    lists1 = [1, 2, 3, 4, 5, [1, 2, 3]]
    lists2 = lists1[:]
    lists1[5].append(4)
    print(lists1, lists2, id(lists1), id(lists2))
    
    strs1 = "abcd"
    strs2 = strs1
    strs1 = "abc"
    print(strs1, strs2, id(strs1), id(strs2))
    
    strs1 = "abcd"
    strs2 = strs1[:]
    strs1 = "abc"
    print(strs1, strs2, id(strs1), id(strs2))

    运行结果

    [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6] 2560550555144 2560550555144
    [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5] 2560550627784 2560548023880
    [1, 2, 3, 4, 5, [1, 2, 3, 4]] [1, 2, 3, 4, 5, [1, 2, 3, 4]] 2560550627400 2560550627400
    [1, 2, 3, 4, 5, [1, 2, 3, 4]] [1, 2, 3, 4, 5, [1, 2, 3, 4]] 2560550627784 2560550627656
    abc abcd 2560547930776 2560548937376
    abc abcd 2560547930776 2560548937376

    知识点

    [:] 等同于浅拷贝,对可变对象是生效的

    [::] 步进

    代码块

    # [::]
    strs = "https://www.cnblogs.com/poloyy"
    
    # 取最后 10 个元素,每 2 个取 1 个
    print(strs[-10::2])
    
    # 取第 0 到 10 的元素,每 5个 取 1 个
    print(strs[0:10:5])
    
    print(strs[::])
    # 倒序
    print(strs[::-1])
    
    lists = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    # 取全部元素,每 3 个 取 1 个
    print(lists[::3])
    # 倒序
    print(lists[::-1])

    运行结果

    cmply
    h:
    https://www.cnblogs.com/poloyy
    yyolop/moc.sgolbnc.www//:sptth
    [1, 4, 7, 10]
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
  • 相关阅读:
    刷题篇--热题HOT 71-80
    刷题篇--热题HOT 61-70
    双飞翼布局介绍-始于淘宝UED
    css布局——百度前端技术学院
    CSS多列布局Multi-column、伸缩布局Flexbox、网格布局Grid详解
    CSS之BFC详解
    深入理解BFC和Margin Collapse
    CSS 布局_如何实现容器中每一行的子容器数量随着浏览器宽度的变化而变化?
    3列、2列自适应布局,中部内容优先显示3列布局等方法
    三列布局,中间自适应
  • 原文地址:https://www.cnblogs.com/poloyy/p/14635278.html
Copyright © 2020-2023  润新知