-2
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
4

4 に答える 4

2
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

それは短絡を可能にするので。

于 2013-02-14T22:11:40.813 に答える
1

sumリスト内包表記と組み合わせて関数を使用できます。

リストにと以外の番号を含めることができる場合は、次のことを試してください。01

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))

リストにとのみが含まれていることが確実にわかっている場合は、次のようにすることもできます。 01

count_has_1 = sum(map(any, my_list))
count_all_0 = len(my_list) - count_has_1

1最初の行は、Pythonがand 0as Trueandを解釈するという事実を使用しておりFalse、その逆も同様です。最初に各サブリストを値のいずれかが真であるかどうかにマッピングし[0,1,0] -> True、次に、結果のブール値のリストを合計し[True, False, True] -> 2ます。

于 2013-02-14T22:24:16.310 に答える
0

あなたは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
于 2013-02-14T22:17:14.877 に答える
0
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
于 2013-02-15T00:16:25.440 に答える