count_element_has_1 = 0
count_all_0 = 0
my_list = [[0,0,1],[1,1,0,1],[0,0,0,0]]
リストの各要素に少なくとも1があるかどうかを確認してから、count_element_has_1に+1を追加し、それらがすべて0の場合は、count_all_0に+1を追加します。
したがって、この場合は次のようになります
count_element_has_1 = 2
count_all_0 = 1
for lst in my_list:
if 1 in lst:
count_element_has_1 += 1
elif lst.count(0) == len(lst):
count_all_0 += 1
リストによっては、2番目の条件が次のようなことを行う方がよい場合があります。
elif all(x==0 for x in lst):
count_all_0 += 1
それは短絡を可能にするので。
sum
リスト内包表記と組み合わせて関数を使用できます。
リストにと以外の番号を含めることができる場合は、次のことを試してください。0
1
count_has_1 = sum(1 for element in my_list if 1 in element)
count_all_0 = sum(1 for element in my_list if all(e == 0 for e in element))
リストにとのみが含まれていることが確実にわかっている場合は、次のようにすることもできます。 0
1
count_has_1 = sum(map(any, my_list))
count_all_0 = len(my_list) - count_has_1
1
最初の行は、Pythonがand 0
as True
andを解釈するという事実を使用しておりFalse
、その逆も同様です。最初に各サブリストを値のいずれかが真であるかどうかにマッピングし[0,1,0] -> True
、次に、結果のブール値のリストを合計し[True, False, True] -> 2
ます。
あなたはcollections.Counter()
、O(N^2)
複雑さを使うことができます:
In [22]: lis=[[0,0,1],[1,1,0,1],[0,0,0,0]]
In [23]: from collections import Counter
In [24]: count_element_has_1 = 0
In [25]: count_all_0 = 0
In [26]: for x in lis:
c=Counter(x)
if c[0]==len(x):
count_all_0 +=1
elif c[1]>0:
count_element_has_1 +=1
....:
In [27]: count_element_has_1
Out[27]: 2
In [28]: count_all_0
Out[28]: 1
my_list = [[0,0,1],[1,1,0,1],[0,0,0,0],[4,0,88]]
#
count_has_1 = sum(1 in sub for sub in my_list)
print count_has_1 # prints 2
#
count_all_0 = sum(not any(sub) for sub in my_list)
print count_all_0 # prints 1
。
サブリストに0と1しかない場合、2つのカテゴリを数えるのは無意味です。
my_list = [[0,0,1],[1,1,0,1],[0,0,0,0]]
#
count_has_non0 = sum(map(any,my_list))
print count_has_non0 # prints 2
#
print len(my_list) - count_has_1 # prints 1