4
import math
lists =  [1,[2,3],4]
total = 0
for i in range(len(lists)):
    total += sum(i)
print(total)

印刷したいのですが、

>>>10

しかし、エラーをスローします。

ネストされたif内のものを含め、すべての数字を追加するようにしたいと思います。

4

3 に答える 3

7

プログラムでは、オブジェクトに 3 つの要素があるため、 for i in range(len(lists))- は 3 に評価されます。listsループ内で+操作total += sum(i)を実行しようとすると、エラーが発生します。したがって、タイプを確認してから、個々の要素を追加する必要があります。intlist

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)
于 2013-04-06T21:22:21.680 に答える
6

リストを平坦化するには、compiler.ast モジュールで flatten 関数を使用できます。次に、すべての要素を単純に合計します。

>>> lists =  [1,[2,3],4]
>>> from compiler.ast import flatten
>>> sum(flatten(lists))
10

編集: Python 2.x でのみ動作します

于 2013-04-06T21:25:43.447 に答える