【问题标题】:Python - error - ValueError: too many values to unpack (expected 6)Python - 错误 - ValueError:解包的值太多(预期为 6)
【发布时间】:2020-07-19 22:19:14
【问题描述】:

我返回 6 个值,但收到错误 - 太多值无法解压 def setOperation(seta, setb):

new_set_a = set(seta)
new_set_b = set(setb)
if len(new_set_b) < 10000 and len(new_set_b) < 10000:

    seta_union_setb = new_set_a.union(new_set_b)
    seta_union_setb_list = list(seta_union_setb)
    seta_union_setb_list.sort()
    return seta_union_setb_list

    seta_inter_setb = new_set_a.intersection(new_set_b)
    seta_inter_setb_list = list(seta_inter_setb)
    seta_inter_setb_list.sort()
    return seta_inter_setb_list

    seta_diff_setb = new_set_a.difference(new_set_b)
    seta_diff_setb_list = list(seta_diff_setb)
    seta_diff_setb_list.sort()
    return seta_diff_setb_list

    setb_diff_seta = new_set_b.difference(new_set_a)
    setb_diff_seta_list = list(setb_diff_seta)
    setb_diff_seta_list.sort()
    return setb_diff_seta_list

    seta_symm_setb = new_set_a.symmetry(new_set_b)
    seta_symm_setb_list = list(seta_symm_setb)
    seta_symm_setb_list.sort()
    return seta_symm_setb_list

    new_set_a_frozen = frozenset(new_set_a)
    return  new_set_a_frozen

un, int, diffa, diffb, sydiff, frset = setOperation(['apple', 'orange', 'grapes', 'mango', 'starfruit'],
                                                    ['papaya', 'mango', 'jackfruit', 'grapes', 'lichy'])

有人可以帮我确定我收到以下错误的原因 - ValueError:要解压的值太多(预计 6 个)

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    错误是您过早地从函数返回。去掉各种returns,在函数结束时只返回一个。

    例如:

    def setOperation(seta, setb):
    
        new_set_a = set(seta)
        new_set_b = set(setb)
        if len(new_set_b) < 10000 and len(new_set_b) < 10000:
    
            seta_union_setb = new_set_a.union(new_set_b)
            seta_union_setb_list = list(seta_union_setb)
            seta_union_setb_list.sort()
    
            seta_inter_setb = new_set_a.intersection(new_set_b)
            seta_inter_setb_list = list(seta_inter_setb)
            seta_inter_setb_list.sort()
    
            seta_diff_setb = new_set_a.difference(new_set_b)
            seta_diff_setb_list = list(seta_diff_setb)
            seta_diff_setb_list.sort()
    
            setb_diff_seta = new_set_b.difference(new_set_a)
            setb_diff_seta_list = list(setb_diff_seta)
            setb_diff_seta_list.sort()
    
            seta_symm_setb = new_set_a.symmetric_difference(new_set_b)  # <-- change to .symmetric_difference
            seta_symm_setb_list = list(seta_symm_setb)
            seta_symm_setb_list.sort()
    
            new_set_a_frozen = frozenset(new_set_a)
    
            return seta_union_setb, seta_inter_setb, seta_diff_setb, setb_diff_seta, seta_symm_setb, new_set_a_frozen
    
        raise Exception('Invalid paramters.') # <-- or return some other value
    
    un, int, diffa, diffb, sydiff, frset = setOperation(['apple', 'orange', 'grapes', 'mango', 'starfruit'],
                                                        ['papaya', 'mango', 'jackfruit', 'grapes', 'lichy'])
    
    print(un, int, diffa, diffb, sydiff, frset)
    

    打印:

    {'grapes', 'orange', 'apple', 'starfruit', 'mango', 'jackfruit', 'lichy', 'papaya'} {'mango', 'grapes'} {'starfruit', 'orange', 'apple'} {'lichy', 'jackfruit', 'papaya'} {'starfruit', 'jackfruit', 'lichy', 'orange', 'papaya', 'apple'} frozenset({'starfruit', 'mango', 'grapes', 'orange', 'apple'})
    

    【讨论】:

      【解决方案2】:
      def setOperation(seta, setb):
          sa = set(seta)
          sb = set(setb)
          s1 = list((sa.union(sb)))
          s2 = list((sa.intersection(sb)))
          s3 = list((sa.difference(sb)))
          s4 = list((sb.difference(sa)))
          s5 = list((sa.symmetric_difference(sb)))
          x = frozenset(seta)
          return (s1, s2, s3, s4, s5, x)
      

      【讨论】:

        【解决方案3】:
        def setOperation(seta, setb):
            # Write your code here
            sa = set(seta)
            sb = set(setb)
            if len(sa) < 10000 and len(sb) < 10000:
        
                sa = set(seta)   # excluding list also will pass the result
                sb = set(setb)
                s1 = sa.union(sb)
                s2 = sa.intersection(sb)
                s3 = sa.difference(sb)
                s4 = sb.difference(sa)
                s5 = sa.symmetric_difference(sb)
                x = frozenset(seta)
                return (s1, s2, s3, s4, s5, x)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-29
          • 1970-01-01
          • 1970-01-01
          • 2019-03-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多