首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按整数值排列成组

按整数值排列成组
EN

Stack Overflow用户
提问于 2021-09-16 12:13:36
回答 4查看 45关注 0票数 0

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

代码语言:javascript
复制
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'
EN

回答 4

Stack Overflow用户

发布于 2021-09-16 12:19:55

您可以使用pandas来执行此操作:

代码语言:javascript
复制
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

不带库(credits):

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2021-09-16 12:36:34

可以只用一个循环,不要太花哨。

代码语言:javascript
复制
letters = 'fedcba'
grades = [25, 50, 70, 80, 90, 101]

x = 75

for letter, grade in zip(letters, grades):
    if x < grade:
        g = letter
        break
票数 0
EN

Stack Overflow用户

发布于 2021-09-16 12:37:27

您可以只使用dictfor循环。

代码语言:javascript
复制
grade_limits = {25: 'f', 50: 'e', 70: 'd', 80: 'c', 90: 'b'}
for limit, grade in grade_limits.items():
    if self.x < limit:
        self.g = grade
        break
else:
    self.g = 'a'

这更加简洁,并且对'a'没有上限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69208224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档