从任意长度的可迭代对象中分解元素

作者: 闲睡猫 | 来源:发表于2017-11-30 19:06 被阅读5次

    试想,如果一个可迭代对象有N多个元素,要将这些元素逐一分解,会得到一大堆零散的变量。而我们的需求并不需要这么多。此时,python的*表达式就派上用场了

    分解列表

    假设以下是黄老邪,黄蓉,柯镇恶,沙通天,丘处机,郭靖,杨康,欧阳克的战斗力。除去第一名和最后一名,求其他人的平均战斗力是多少?

    fight_num = [95, 70, 62, 50, 75, 85, 75, 80]
    # 对数据进行排序
    first, *middle, last = sorted(fight_num, reverse=True)
    print(first)
    # 95
    print(middle)
    # [85, 80, 75, 75, 70, 62]
    print(last)
    # 50
    avg = sum(middle) / float(len(middle))
    print(avg)
    # 74.5
    

    迭代变长的元组

    *式的语法在迭代一个变长的元组序列时尤其有用

    records = [
        ('guojing', '降龙十八掌', '双手互搏'),
        ('huangrong', '打狗棒法'),
    ]
    
    def guojing(x, y):
        print('郭靖', x, y)
    
    def huangrong(s):
        print('黄蓉', s)
    
    for tag, *args in records:
        if tag == 'guojing':
            guojing(*args)
        elif tag == 'huangrong':
            huangrong(*args)
    
    # 郭靖 降龙十八掌 双手互搏
    # 黄蓉 打狗棒法
    

    拆分字符串

    guojing = '郭靖,降龙十八掌,九阴真经,双手互搏,蒙古摔跤,射雕,黄蓉'
    
    uname, *kongfu, wife = guojing.split(',') 
    print(uname, kongfu, wife)
    # 郭靖 ['降龙十八掌', '九阴真经', '双手互搏', '蒙古摔跤', '射雕'] 黄蓉
    

    源码下载

    相关文章

      网友评论

        本文标题:从任意长度的可迭代对象中分解元素

        本文链接:https://www.haomeiwen.com/subject/ldkbbxtx.html