zoukankan      html  css  js  c++  java
  • &【19】Python 序列解包

    版权声明:本文为CSDN博主「极客点儿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/yilovexing/article/details/80576788

    Python 中有很多很实用的语法糖,这些语法糖可以帮助我们简化代码、更易理解等优点,接下里再看一个 Python3 中特别实用的语法序列解包(序列解包是 Python 3.0 之后才有的语法)。

    那什么是序列解包呢?先看一个例子:

    a, b, c = 1, 2, 3
    print(a)
    print(b)
    print(c)
    
    # 输出
    # 1
    # 2
    # 3

    这种方法并不限于列表和元组,而是适用于任意序列类型(甚至包括字符串和字节序列)。只要赋值运算符左边的变量数目与序列中的元素数目相等,你都可以用这种方法将元素序列解包到另一组变量中。

    解包的使用还可以更有逼格,可以利用 * 表达式获取单个变量中的多个元素,只要它的解释没有歧义即可。

    *获取的值默认为 list

    获取剩余部分:

    a, b, *c = 0, 1, 2, 3
    print(a)
    print(b)
    print(c)
    
    # 输出 
    0
    1
    [2, 3]

    获取中间部分:

    a, *b, c = 0, 1, 2, 3
    print(a)
    print(b)
    print(c)
    
    # 输出
    0
    [1, 2]
    3

    如果左值比右值要多,那么带 * 的变量默认为空:

    a, b, *c = 0, 1
    print(a)
    print(b)
    print(c)
    
    # 输出 
    0
    1
    []
    a, *b, c = 0, 1
    print(a)
    print(b)
    print(c)
    
    # 输出 
    0
    []
    1

    嵌套解包:

    (a, b), (c, d) = (1, 2), (3, 4)
    print(a)
    print(b)
    print(c)
    print(d)
    print(a, b, c, d)
    
    # 输出
    1
    2
    3
    4
    1 2 3 4

    接下来实战一下,假如一个字符串 'ABCDEFGH',要输出下列格式:

    A ['B', 'C', 'D', 'E', 'F', 'G', 'H']
    B ['C', 'D', 'E', 'F', 'G', 'H']
    C ['D', 'E', 'F', 'G', 'H']
    D ['E', 'F', 'G', 'H']
    E ['F', 'G', 'H']
    F ['G', 'H']
    G ['H']
    H []

    即每次取出第一个作为首,然后的字符串拆成列表,放置在后面

    一般的处理过程是:

    1. 将切片中索引为 0 的字符赋值给 a
    2. 将切片中索引为 1 之后字符再赋值给 s
    3. 用 list 函数将字符串转变为列表
    4. 用 while 循环来 s 来判断,为空,则退出循环
    s = 'ABCDEFGH'
    while s:
        x, s = s[0], list(s[1:])
        print(x, s)
    
    
    # 输出 
    A ['B', 'C', 'D', 'E', 'F', 'G', 'H']
    B ['C', 'D', 'E', 'F', 'G', 'H']
    C ['D', 'E', 'F', 'G', 'H']
    D ['E', 'F', 'G', 'H']
    E ['F', 'G', 'H']
    F ['G', 'H']
    G ['H']
    H []

    上面的处理,可以用序列解包的方法会来处理。序列解包,在赋值时无疑更方便、更简洁、更好理解、适用性更强!

    运用序列解包的功能重写上面的代码:

    s = 'ABCDEFGH'
    while s:
        x, *s = s
        print(x, s)
    
    
    # 输出
    A ['B', 'C', 'D', 'E', 'F', 'G', 'H']
    B ['C', 'D', 'E', 'F', 'G', 'H']
    C ['D', 'E', 'F', 'G', 'H']
    D ['E', 'F', 'G', 'H']
    E ['F', 'G', 'H']
    F ['G', 'H']
    G ['H']
    H []
  • 相关阅读:
    智能电视系列(4)-高通,天才与极限
    Intel processor brand names-Xeon,Core,Pentium,Celeron----Xeon
    Intel CPUs
    Configuring IPMI under Linux using ipmitool
    CPUID
    About Intel® Processor Numbers
    ipad iphone 开发的应用,加一个启动预览图片
    mysql 查询随机条记录的sql语句和php计算概率
    参考:iPhone OS 3.0中的字体列表
    UIScrollView 不能滚动的问题
  • 原文地址:https://www.cnblogs.com/doagain/p/15521722.html
Copyright © 2011-2022 走看看