Python中的Counter是一个非常有用的工具,可以快速统计序列中每个元素的数量。Counter类定义在collections模块中,可以通过以下方式导入:
from collections import Counter
Counter过滤
如果我们想要过滤掉Counter中某些元素,可以使用字典推导式来实现。例如,如果我们有一个包含字母的列表,我们想要统计每个字母出现的次数,但是只想统计元音字母的数量,可以使用以下代码:
from collections import Counter
letters = ['a', 'b', 'c', 'd', 'e', 'a', 'b', 'c', 'd', 'a', 'e']
vowels = ['a', 'e', 'i', 'o', 'u']
letter_counts = Counter(letters)
vowel_counts = {key: value for key, value in letter_counts.items() if key in vowels}
print(vowel_counts)
输出结果为:
{'a': 3, 'e': 2}
上面的代码中,我们使用Counter统计了字母出现的次数,然后使用字典推导式过滤出元音字母的出现次数。
原始数据约分
如果我们有一些数值数据,我们想要尽可能地约分这些数据,可以使用Python中的fractions模块。例如,如果我们有以下数据:
data = [0.1, 0.2, 0.25, 0.3, 0.33, 0.5, 0.75, 1.0, 1.25, 1.5]
我们可以使用以下代码将这些数据约分为分数:
from fractions import Fraction
fractions_data = [Fraction(x).limit_denominator() for x in data]
print(fractions_data)
输出结果为:
[Fraction(1, 10), Fraction(1, 5), Fraction(1, 4), Fraction(3, 10), Fraction(1, 3), Fraction(1, 2), Fraction(3, 4), Fraction(1, 1), Fraction(5, 4), Fraction(3, 2)]
上面的代码中,我们使用Fraction将数据转化为分数,然后使用limit_denominator()函数进行约分。
另外,如果我们想要尽可能地将分数化为整数或小数,可以使用上面的分数对象的numer和denom属性。例如,如果我们想将分数转化为小数,可以使用以下代码:
decimal_data = [float(x.numerator) / float(x.denominator) for x in fractions_data]
print(decimal_data)
输出结果为:
[0.1, 0.2, 0.25, 0.3, 0.3333333333333333, 0.5, 0.75, 1.0, 1.25, 1.5]
上面的代码中,我们使用分数对象的numer和denom属性将分数转化为小数。