我知道如何獲取僅包含數字的嵌套串列的總和,但如何獲取包含字串和數字的嵌套串列的總和?
def sum_all_numbers(seq):
if not seq:
return 0
elif isinstance(seq[0], str):
seq.remove(seq[0])
elif isinstance(seq[0], list):
return sum_all_numbers(seq[0]) sum_all_numbers(seq[1:])
else:
return seq[0] sum_all_numbers(seq[1:])
我想使用雙遞回來解決這個問題,但我沒有設法讓 isinstance 部分正確。
sum_all_numbers(["a", "b", ["c", 3, 4, [5, "d"], 10], 9])
是輸入
uj5u.com熱心網友回復:
您可以將所有串列展平為單個串列,然后遍歷和過濾串列 reuslt 或在遍歷串列時過濾值。
使用第二種方法添加代碼
# your code goes here
def get_sum(array: list):
sum_ = 0
for i in array:
if type(i)==int:
sum_ = i
elif type(i) in [list, tuple]:
sum_ = get_sum(i)
return sum_
result = get_sum(["a", "b", ["c", 3, 4,(1,2,['a', 'b', [1,2,0]],'a',33), [5, "d"], 10], 9])
print(result)
# output 70
uj5u.com熱心網友回復:
我建議使用:
try/except嘗試添加數字;isinstance(x, (str, bytes))測驗是否x是一個字串。
這樣,您可以添加任何數字,而不僅僅是int.
def sum_all_numbers(seq):
result = 0
for x in seq:
try:
result = x
except TypeError:
if not isinstance(x, (str, bytes)):
result = sum_all_numbers(x)
return result
print( sum_all_numbers(["a", "b", ["c", 3, 4, [5, "d"], 10], 9]) )
# 31
請注意,如果嵌套結構包含非數字、字串或可迭代物件,則此版本將失敗:
sum_all_numbers([None, 3, 4])
# TypeError: 'NoneType' object is not iterable
為了修復它,我們可以使用一個新try/except的iter:
def sum_all_numbers(seq):
result = 0
for x in seq:
try:
result = x
except TypeError:
if not isinstance(x, (str, bytes)):
try:
subseq = iter(x)
result = sum_all_numbers(subseq)
except TypeError:
pass
return result
print( sum_all_numbers(["a", "b", ["c", 3, 4, [None, 12.0], [5, "d"], 10], 9]) )
# 43.0
我建議閱讀more_itertools.collapse 的 python 源代碼,以獲取更多包含在此函式中的想法和錯誤處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/392908.html
上一篇:如何僅使用遞回解決磁區問題
