您好我在遇到这个问题时遇到了麻烦它要求我写一个递归函数,它将所有数字添加到一个深层嵌套的列表中,该列表由数字和单词组成。
我已经尝试过,但没有在哪里。
答案 0 :(得分:3)
我会从"过滤器开始#34;函数只产生数字:使用Py 3.4或更好,可能是
import numbers
def getnumbers(alist, number_class=numbers.Number):
for x in alist:
if isinstance(x, number_class):
yield x
elif isinstance(x, list):
yield from getnumbers(x)
(如果需要,很容易翻译成旧版本,只是不那么优雅: - )。
然后,
sum(getnumbers(alist))
将完成这项工作。
我认为这"分解"所有数字的选择,除了数字和单词的深层嵌套列表中的数字,除了对它们进行求和之外,还可以提供比将两个任务压缩成单个函数更优雅和可重用的代码。
答案 1 :(得分:3)
def nested_sum(q):
sum = 0
for v in q:
if type(v) == int or type(v) == float:
sum += v
elif type(v) == list:
sum += nested_sum(v)
return sum
答案 2 :(得分:1)
total = 0
def flat_sum(q):
global total
if not q:
return
if isinstance(q, list):
if not isinstance(q[0], list) and not isinstance(q[0], str):
total += q[0]
else:
flat_sum(q[0])
flat_sum(q[1:])
else:
if not isinstance(q, str):
total += q
flat_sum([1,"b",[4.7, 'a', -1, 99, ['hi', [7, 0]]]])
print total
答案 3 :(得分:1)
您可以使用numbers.Number
检查任何数字类型。
from numbers import Number
def flat_sum(lst):
if len(lst) == 0:
return 0
hd, tl = lst[0], lst[1:]
if isinstance(hd, list):
return flat_sum(hd) + flat_sum(tl)
elif isinstance(hd, Number):
return hd + flat_sum(tl)
else:
return flat_sum(tl)