私はp = [[[[[[[[1, 2, 3]]]]]]]]
のようなリストを持っています。空リストを含むリスト内のアイテムの数を取得したいので、このリストでは10を取得します。リストを列挙しようとしています。 -Pythonでリスト内のサブリストを数えよう
for idx, item in enumerate(p):
count = count + idx
ただし、空のリストを取得できません。ご意見をお聞かせください。
私はp = [[[[[[[[1, 2, 3]]]]]]]]
のようなリストを持っています。空リストを含むリスト内のアイテムの数を取得したいので、このリストでは10を取得します。リストを列挙しようとしています。 -Pythonでリスト内のサブリストを数えよう
for idx, item in enumerate(p):
count = count + idx
ただし、空のリストを取得できません。ご意見をお聞かせください。
短いバージョン:
>>> def recur_len(l):
return sum(1 + recur_len(item) if isinstance(item,list) else 1 for item in l)
>>> recur_len([[[[[[[[1, 2, 3]]]]]]]])
10
より詳細なコード
>>> def recur_len(l):
count = 0
for item in l:
if isinstance(item,list):
count += 1 + recur_len(item)
else:
count += 1
return count
>>> recur_len([[[[[[[[1, 2, 3]]]]]]]])
10
あなたが唯一のちょうど別のリストを含有しない、最終的なリストの内容を除き、リスト(またはlist
のサブクラス)と、他には何をカウントしたい場合:
def len_counting_containers(inlist):
count = 0
current = inlist
while len(current) == 1 and isinstance(current[0], list):
count += 1
current = current[0]
return count + len(current)
len_counting_containers([[[[[[[[1, 2, 3]]]]]]]])
たちを与える:
10
これは非常に壊れやすい操作です(どんな場合でも、あなたはPythonでisinstance()
を使用しています)ので、着信データが常に期待通りに構造化されていることを確認してください。あなたのデータがあなたが管理するソースから来たものである場合は、あなたがデータをどのように作り出し、それをより良い形式で提供できるかを見てみることをお勧めします。例えば、(7, [1,2,3])
。
あなたはまた、再帰的にこれを実現することができます。
def len_counting_containers(current):
return len_counting_containers(current[0])+1 if len(current) == 1 and isinstance(current[0], list) else len(current)
len_counting_containers([[[[[[[[1, 2, 3]]]]]]]])
をこれは、より少ないコードで同じ結果が得られますが、あなたはめちゃくちゃ大きなリストで作業している場合、これは再帰の制限を打つことができました。以下のコードの
を参照してくださいありがとう、私はできるだけ多くを把握しようとしていますので、私はmyList =([1、[1、2、[3、 4]]])、私はこの操作のための2つのみを取得していますが、そこに7つの項目があります、私は自分自身をコードしようとするでしょう – Varun
ああ、あなたは '空リスト'を含むと言ったので、項目。私は[ジャミラクの答え](http://stackoverflow.com/a/9955769/722121)はあなたが望むことをすると思います。 –
def depth(a):
return 1 + depth(a[0]) if type(a) is list else 0
デモ:
a = 'x'
for n in range(10):
a = [a]
print a, depth(a)
## ['x'] 1
## [['x']] 2
## [[['x']]] 3
## [[[['x']]]] 4
## [[[[['x']]]]] 5
## [[[[[['x']]]]]] 6
## [[[[[[['x']]]]]]] 7
## [[[[[[[['x']]]]]]]] 8
## [[[[[[[[['x']]]]]]]]] 9
## [[[[[[[[[['x']]]]]]]]]] 10
'code' DEF deep_count(P):PにおけるEの \t和= 0 \t: \t \t和=和+ 1 \t \t場合is_list(E): \t \t \t和=和+ deep_count(E ) \t return sum 'code' – Varun
空のリストがそこにはありません。 – jamylak
あなたはそのリストを10点取得する方法を説明できますか? –
彼は各リスト内のアイテムの数を数え、それらを一緒に追加します – jamylak