6

多次元リストの長さをどのように見つけますか?

私は自分で方法を思いつきましたが、これが多次元リストの値の数を見つける唯一の方法ですか?

multilist = [['1', '2', 'Ham', '4'], ['5', 'ABCD', 'Foo'], ['Bar', 'Lu', 'Shou']]
counter = 0
for minilist in multilist:
    for value in minilist:
        counter += 1

print(counter)

多次元リストの長さを見つけるもっと簡単な方法があると確信していますが、 len(list) は機能しません。内部のリストの数しか得られないからです。これよりも効率的な方法はありますか?

4

4 に答える 4

11

どうですか:

sum(len(x) for x in multilist)
于 2013-04-14T05:55:11.707 に答える
4

@mgilsonのソリューションの代替

sum(map(len, multilist))
于 2013-04-14T06:36:00.253 に答える
0

別の選択肢(これか、見逃した数学の講義を見る...)

def getLength(element):
    if isinstance(element, list):
        return sum([getLength(i) for i in element])
    return 1

これにより、さまざまな程度の「多次元性」(それが言葉である場合)が共存できます。

例えば:

>>> getLength([[1,2],3,4])
4

または、異なるコレクション タイプを許可するには

def getLength(element):
    try:
        element.__iter__
        return sum([getLength(i) for i in element])
    except:
        return 1

例えば:

>>> getLength([ 1, 2, (1,3,4), {4:3} ])
6
>>> getLength(["cat","dog"])
2

(文字列は反復可能ですが、 __iter__ メソッドラッパーがないため、問題は発生しないことに注意してください...)

于 2013-04-14T06:45:01.667 に答える