以下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_data
和n <= 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/