zoukankan      html  css  js  c++  java
  • 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]
  • 相关阅读:
    poj 2528 Mayor's posters (线段树+离散化)
    poj 1201 Intervals (差分约束)
    hdu 4109 Instrction Arrangement (差分约束)
    poj 1195 Mobile phones (二维 树状数组)
    poj 2983 Is the Information Reliable? (差分约束)
    树状数组 讲解
    poj 2828 Buy Tickets (线段树)
    hdu 1166 敌兵布阵 (树状数组)
    Ubuntu网络配置
    Button控制窗体变量(开关控制灯的状态)
  • 原文地址:https://www.cnblogs.com/poloyy/p/14635278.html
Copyright © 2011-2022 走看看