2017-09-14 93 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

是'Counter'真正完成这个必要 – Mangohero1

+1

你真的应该包括*为什么*您希望您给了输出和高层次的描述你的任务就在这里,听起来好像你想要对你的价值进行计数,桶的数值低于50,在50和84之间,85和85以上。你的答案。 –

回答

3

您需要“正常化”您的值并计算这些值;所以对于i < 50情况下,你可以使用一个字符串'below 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']) 

请注意,我的50 - 84组数50。这将产生一个计数器对象,你然后就询问特定标签:

>>> 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()这里,然而,这种情况下,它会更容易只使用3个变量:

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

您还可以使用pandas.cut这里pandas.Series.value_counts一起。 .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)。

最后if你不指定标签,他们将默认为:?

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