def nested_count(l : 'any nested list of int', a : int) -> int:
c = 0
while len(l) != 0:
for x in l:
if type(x) == int:
if x == a:
c = c + 1
l.remove(x)
nested_count(l,a)
else:
continue
elif type(x) == list:
nested_count(x,a)
return c
这个函数传递了一个嵌套的int列表和一个int作为参数;它返回单个int参数出现在嵌套列表参数中的次数,例如:
nested_count( [[1,2,[4,[1],8],[1,3,2]],[1,1]], 1 )
返回5
我不确定为什么我的功能不起作用
有人能告诉我如何解决它吗?非常感谢。
答案 0 :(得分:1)
不使用嵌套函数调用的结果。您可能应该分别用<table id="addProducts" border="1">
<tr>
<td>POI</td>
<td>Quantity</td>
<td>Price</td>
<td>Product</td>
<td>Add Rows?</td>
</tr>
<tr>
<td>1</td>
<td><input size=25 type="text" id="lngbox" readonly=true/></td>
<td><input size=25 type="text" class="price" readonly=true/></td>
<td>
<select name="selRow0" class="products">
<option value="500">Product 1</option>
<option value="200">Product 2</option>
<option value="450">Product 3</option>
</select>
</td>
<td><input type="button" class="delProduct" value="Delete" /></td>
<td><input type="button" class="addProduct" value="AddMore" /></td>
</tr>
</table>
<div id="shw"></div>
和c += nested_count(l,a)
替换这些行。
答案 1 :(得分:0)
您没有将nested_count
结果添加到c
:
def nested_count(lst, l):
c = 0
for i in lst:
if i == l:
c += 1
elif type(i) == list:
c += nested_count(i, l)
return c
最好用for。迭代列表。
答案 2 :(得分:0)
在迭代它时你不应该改变列表,你需要从递归调用返回结果。您可以通过检查l
的类型以及它是否int
然后返回bool
告诉它是否与a
匹配来大大简化功能。如果l
是一个列表,只需在其{&#39;}上递归调用nested_count
。项目和sum
结果:
def nested_count(l, a):
# Base case
if type(l) == int:
return l == a
return sum(nested_count(x, a) for x in l)
答案 3 :(得分:0)
为什么异类列表?如果您不打算输入所有参数,为什么还要打字呢?你为什么要改变输入?
from typing import List
def deep_count_elem (x:int, xs:List) -> int:
# done
if len(xs) == 0:
return 0
# if list, count in this list and recurse
elif isinstance(xs[0], list):
return deep_count_elem(x, xs[0]) + deep_count_elem(x, xs[1:])
# if element matches, add 1
elif x == xs[0]:
return 1 + deep_count_elem(x, xs[1:])
# otherwise add nothing, move to next element
else:
return deep_count_elem(x, xs[1:])
print(deep_count_elem(1, [[1,2,[4,[1],8],[1,3,2]],[1,1]])) # 5
答案 4 :(得分:0)
正如其他人所提到的,您需要累积nested_count
的递归调用的返回值以获得正确的总数。
此外,从您正在迭代的列表(或其他集合)中删除项目可能会导致意外结果,请参阅SO Python常见问题Removing items from a list while iterating over the list以获取详细信息和一些相关的SO页面,特别是:Removing from a list while iterating over it。
通常首选call isinstance
rather than type
进行类型测试。 isinstance
函数可以在一次调用中测试多种类型,如果该对象是指定类型的子类,它也将返回True。
以下是一些处理列表或元组的单行代码。
def nested_count(l, a):
return sum(nested_count(x, a) if isinstance(x, (list, tuple)) else x == a for x in l)
和
def nested_count(l, a):
return l.count(a) + sum(nested_count(x, a) for x in l if isinstance(x, (list, tuple)))