7

私はこのようなデータ構造を持っています (リストの実際のリストは非常に長く、さまざまな深さです)。私は事前に彼らの深さを知っています。

 a=( [1,2], [2,3,[4,5]] )
 b=( [[1,2],[2,3]] )

各単一リストをループしたい。これを行うにはどうすればよいですか?

私はこのようなことをしたくありません:

for l in a:
    if instance(l, list):
        for ll in l:
            if instance(ll, list): 
                ...
4

4 に答える 4

4

目的を定義していないため、すべての要素を合計する関数をコーディングしています。

def rec_sum(lst):
    if not lst:
        return 0
    el = lst.pop()
    if isinstance(el, list):
        return rec_sum(el) + rec_sum(lst)
    else:
        return el + rec_sum(lst)

事前に深さがわかっている場合でも、再帰を使用した方が簡単に解決できます。

Python ではスタック フレームが 1000 スタックに制限されていることに注意してください。したがって、リストに 1000 を超えるアイテムがある場合は、例外が発生するはずです。

1000 を超える項目を持つことができると思われる場合、ここでは再帰と for ループを使用する混合ソリューションを示します。1000 アイテムではなく、1000 レベルに制限されています。

def rec_for_sum(lst):
    if not lst:
        return 0
    count = 0
    for el in lst:
        if not isinstance(el, list):
            count += el
        else:
            count += rec_for_sum(el)
    return count
于 2013-11-11T15:25:59.907 に答える
1

オブジェクトがリストであるかどうかを確認してから、さらに深く掘り下げることができます。

オブジェクトがリストまたはタプル (文字列ではない) であるかどうかを確認する方法も参照してください。

def myprint(list):
    for i in list:
        if isinstance(i, list):
            myprint(i)
        else:
            print i
于 2013-11-11T13:56:20.747 に答える