import math
lists = [1,[2,3],4]
total = 0
for i in range(len(lists)):
total += sum(i)
print(total)
印刷したいのですが、
>>>10
しかし、エラーをスローします。
ネストされたif内のものを含め、すべての数字を追加するようにしたいと思います。
import math
lists = [1,[2,3],4]
total = 0
for i in range(len(lists)):
total += sum(i)
print(total)
印刷したいのですが、
>>>10
しかし、エラーをスローします。
ネストされたif内のものを含め、すべての数字を追加するようにしたいと思います。
プログラムでは、オブジェクトに 3 つの要素があるため、 for i in range(len(lists))
- は 3 に評価されます。lists
ループ内で+操作total += sum(i)
を実行しようとすると、エラーが発生します。したがって、タイプを確認してから、個々の要素を追加する必要があります。int
list
def list_sum(L):
total = 0
for i in L:
if isinstance(i, list):
total += list_sum(i)
else:
total += i
return total
これは @pavelanossov のコメントです - よりエレガントな方法で同じことを行います
sum(sum(i) if isinstance(i, list) else i for i in L)
リストを平坦化するには、compiler.ast モジュールで flatten 関数を使用できます。次に、すべての要素を単純に合計します。
>>> lists = [1,[2,3],4]
>>> from compiler.ast import flatten
>>> sum(flatten(lists))
10
編集: Python 2.x でのみ動作します