以下python代码的第10行具有UnboundLocalError。谁能教我如何解决这个问题?

def answer(data, n):
    new_data = []
    for each_integer in data:
        new_data = [each_integer for each_integer in data if data.count(each_integer) == n]
    if n > 1:
        new_data = data
    print("\n\nNew Data")
    print(new_data)

supplied_data = [53, 85, 29, 23, 29, 26, 88, 78, 5, 75, 74, 44, 33, 62, 98, 50, 89, 93, 24, 14, 74, 49, 83, 45, 41, 14, 68, 76, 68, 8, 77, 85, 17, 3, 9, 30, 71, 48, 18, 25, 86, 55, 55, 20, 74, 76, 99, 87, 59, 87, 36, 29, 29, 8, 22, 65, 1, 18, 23, 5, 13, 60, 7, 5, 98, 61, 78, 64, 36, 60, 49, 57, 31, 32, 41, 86, 52, 90, 9, 55, 35, 35, 2, 44, 8, 19, 96, 81, 68, 7, 8, 51, 9, 76, 12, 96, 61, 99, 74]
answer(supplied_data, 0)
answer(supplied_data, 1)
answer(supplied_data, 6)


追溯

    >>> def答案(数据,n):
    ...对于数据中的each_integer:
    ... new_data = [如果data.count(each_integer)== n,则为数据中的each_integer的each_integer]
    ...如果n> 1:
    ... new_data =数据
    ... print(“ \ n \ n新数据”)
    ...打印(新数据)
    ...
    ...供应商数据= [53、85、29、23、29、26、88、78、5、75、74、44、33、62、98、50、89、93、24、14、74、49, 83、45、41、14、68、76、68、8、77、85、17、3、9、30、71、48、18、25、86、55、55、20,
     74、76、99、87、59、87、36、29、29、8、22、65、1、18、23、5、13、60、7、5、98、61、78、64、36, 60、49、57、31、32、41、86、52、90、9、55、35、35、2、44、8、19、96、81、68、7、8、51、9、76, 12
    ,96,61,99,74]
      文件“”,第9行
        供应的数据= [53、85、29、23、29、26、88、78、5、75、74、44、33、62、98、50、89、93、24、14、74、49、83、45 ,41,14,68,76,68,8,77,85,17,3,9,30,71,48,18,25,86,55,55,20,
     74、76、99、87、59、87、36、29、29、8、22、65、1、18、23、5、13、60、7、5、98、61、78、64、36, 60、49、57、31、32、41、86、52、90、9、55、35、35、2、44、8、19、96、81、68、7、8、51、9、76, 12
    ,96,61,99,74]
                    ^
    SyntaxError:语法无效
    >>>回答(提供的数据,0)
    追溯(最近一次通话):
      文件“”,第1行,位于
    NameError:名称“答案”未定义
    >>>回答(提供的数据,1)
    追溯(最近一次通话):
      文件“”,第1行,位于
    NameError:名称“答案”未定义
    >>>回答(提供的数据,6)
    追溯(最近一次通话):
      文件“”,第1行,位于
    NameError:名称“答案”未定义
    >>>

最佳答案

问题是您的逻辑中有一个使用new_data的分支,但可能从未定义new_data。当data为空时会发生这种情况,因此您永远不会输入for循环主体并创建new_datan <= 1,即,输入else-block,在其中使用new_data而不定义它。

看到:

>>> answer([],1)


New Data
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 10, in answer
UnboundLocalError: local variable 'new_data' referenced before assignment


您可以通过将new_data = data放在函数顶部来快速解决此问题。老实说,这种方法的效率很低,因为它可以在二次时间内工作。每次some_list.count遍历整个列表!因此,最好先通过一次计数元素,然后再通过一次过滤器-这将是线性时间:

>>> from collections import Counter
>>> def answer(data, n):
...   counts = Counter(data)
...   return [e for e in data if counts[e] == n]
...
>>> answer(data, 6)
[]
>>> answer(data, 2)
[85, 23, 78, 44, 98, 14, 49, 41, 14, 85, 18, 86, 99, 87, 87, 36, 18, 23, 60, 7, 98, 61, 78, 36, 60, 49, 41, 86, 35, 35, 44, 96, 7, 96, 61, 99]
>>> answer(data, 3)
[5, 68, 76, 68, 9, 55, 55, 76, 5, 5, 9, 55, 68, 9, 76]
>>> answer(data, 4)
[29, 29, 74, 74, 8, 74, 29, 29, 8, 8, 8, 74]
>>> answer(data, 5)

关于python - ErrorCode:第10行的UnboundLocalError,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41682870/

10-12 18:37