更新と最終回答:
私のソリューションは、ネストされたリストのリストを再帰します。リストに が含まれている場合2
、カウントは 1 に設定されます。次に、サブリストのカウントの合計が追加されます。このアプローチは、以下の 2 番目の使用例のように、数値とリストを同じレベルで混在させることができる異種リストをサポートします。
import collections
def list_count(l):
count = int(2 in l)
for el in l:
if isinstance(el, collections.Iterable):
count += list_count(el)
return count
いくつかのテスト ケースを次に示します。
my_list = [[2,3,2,2], [[2,1,2,1], [2,1,1]], [1,1,1]]
print = list_count(my_list)
# 3 is printed
my_list = [2, [2,3,2,2], [[2,1,2,1], [2,1,1]], [1,1,1]]
print = list_count(my_list)
# 4 is printed
@Akavallの答えは、これがワンライナーに折りたたまれる可能性があることを思い出させました。(しかし、これを行うと、SO で常に (通常は正当化された) 読みやすさの苦情が寄せられます。)
def list_count(l):
return ( int(2 in l) +
sum([list_count(el) for el in l
if isinstance(el, collections.Iterable)]) )
元の回答(元の質問が探していたものではありません)
更新: @NPE は、予想される結果が指定された後に回答を更新しました。彼の現在の答えは、元のポスターが望むように機能します。
@NPEの(元の)答えは近いですが、あなたは尋ねました:
値 2 を含むリスト要素を数える
あなたが必要として私が読んだもの:
my_list = [[2,3,2,2], [[2,1,2,1], [2,1,1]], [1,1,1]]
print(sum([1 for e in [flatten(sl) for sl in ml] if 2 in e]))
しかし、彼は探してい3
ます。私のコードは、各最上位要素を反復処理し、2 が含まれている場合はそれをカウントするため、2 を生成しますが、それは彼が実際に望んでいることではありません。