2017-09-14 10 views
-2

以下のIF文に基づいて項目の数を出力したいとします。私が下にあるのは、リスト全体、7回、各項目(1)の数を印刷することです。それは私が望むものではありません。理想的にはそれが戻ってくる:条件に基づいてタプルの要素の数を表示する

任意のアイデア?

from collections import Counter 

li = (1,4,55,6,87,44,25) 

for i in li: 

    if i < 50: 
     print(Counter(li)) 
    elif i > 50 and i < 85: 
     print(Counter(li)) 
    else: 
     print(Counter(li)) 
+1

あなたは本当にあなたが与えた出力、および高レベルの記述を期待する理由* *含まれている必要があり – Mangohero1

+1

このためCounter'が本当に必要 'ですあなたの仕事はここにありますバケツの値が50より小さく、50と84と85との間でバケットカウントをしたいと思っているように聞こえます*明示的に*することで、あなたは答えます。 –

答えて

3

値を正規化してカウントする必要があります。そうi < 50場合のために、あなたは文字列'below 50'を使用してそれら値数えることができる:私は50 - 84グループで50を数え

counts = Counter(
    'below 50' if i < 50 else '50 - 84' if i < 85 else '85 or up' for i in li 
) 
print(counts['below 50']) 
print(counts['50 - 84']) 
print(counts['85 or up']) 

注意を。これは、単一のカウンタオブジェクトを生成し、そしてあなたは、単に特定のラベルを求める:

>>> counts = Counter(
...  'below 50' if i < 50 else '50 - 84' if i < 85 else '85 or up' for i in li 
...) 
>>> counts 
Counter({'below 50': 5, '85 or up': 1, '50 - 84': 1}) 

あなたは本当にしかし、ここCounter()は必要ありません。あなたはまた、pandas.Series.value_countsと一緒にここにpandas.cutを使用することができます

below50 = 0 
between50_84 = 0 
over84 = 0 

for i in li: 
    if i < 50: 
     below50 += 1 
    elif i < 85: 
     between50_84 += 1 
    else: 
     over84 += 1 

print(below50) 
print(between50_84) 
print(over84) 
1

:この場合のためにそれだけで3つの変数を使用することが容易になるだろう。 .cut

xの各値が属する半分のビンのインデックスを返します。

li = (1,4,55,6,87,44,25) 

counts = pd.cut(li, bins=[-float('inf'), 50., 85., float('inf')], 
       labels=['<50', '50-85', '>85']).value_counts() 

あなたの結果は、パンダのシリーズになります。

print(counts) 
<50  5 
50-85 1 
>85  1 

注パラメータright

はビンが右端のエッジを含むか否かを示します。右 == TRUE(デフォルト)場合は、ビンは、[1,2,3,4](1,2]、(2,3]、(3,4]を示す。

最後ならあなたは彼らがデフォルトだろう、ラベルを指定しないでください:?

counts = pd.cut(li, bins=[-float('inf'), 50., 85., float('inf')]).value_counts() 

print(counts) 
(-inf, 50.0] 5 
(50.0, 85.0] 1 
(85.0, inf]  1 
関連する問題