首页 > 解决方案 > 根据整数值分组

问题描述

所以我主要是在寻找关于如何整理我的代码的建议。我有一个类,它有一个整数实例变量 x \in [0, 100]。我想根据每个实例的 x 值为每个实例分配一个字母等级(实例变量 g)。有没有比使用大量 if、elif、else 语句更好/更简洁的方法?

if self.x < 25:
   self.g = 'f'
elif self.x < 50:
   self.g = 'e'
elif self.x < 70:
   self.g = 'd'
elif self.x < 80:
   self.g = 'c'
elif self.x < 90:
   self.g = 'b'
else:
   self.g = 'a'

标签: pythonpython-3.x

解决方案


您可以为此使用熊猫:

import pandas as pd
s = pd.Series([2, 41, 61, 83])
pd.cut(s, [0, 25, 50, 70, float("inf")], labels=['a', 'b', 'c', 'd'], retbins=True, right=True)

# 0    a
# 1    b
# 2    c
# 3    d

没有图书馆(学分):

class RangeDict(dict):
    def __getitem__(self, item):
        if not isinstance(item, range):
            for key in self:
                if item in key:
                    return self[key]
            raise KeyError(item)
        else:
            return super().__getitem__(item)

rng = RangeDict({range(0, 25): 'f', range(25,50): 'e'})
val = 21
print(rng[val])
# f

推荐阅读