如何根据参数值选择正确的列表?

2024-04-25 09:25:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含多个列表的类,即:

class my_class(object):
    def __init__(self, list_A, list_B, ..., list_Z):
        self.list_A = list_A
        (...)
        self.list_Z = list_Z

然后我需要一个方法将一个元素附加到一个列表中。我现在所做的是类似于从C:

def add_to_list(self, list_name, item):
    if list_name == 'A':
        self.list_A.append(item)
    elif list_name == 'B':
        self.list_B.append(item)
    (...) and so on

这是非常无效的,需要大量的工作,如果我想改变一些东西。 有没有办法把它缩短?我想象类似于string.format格式()

self.list_{}.append(item) .format(list_name)

Tags: 方法nameselfaddformat元素列表object
3条回答

使用getattr访问属性

def append(self, list_name, item):
    getattr(self, 'list_%s' % list_name).append(item)

不要围绕变量名构建程序逻辑。请指定一个项目必须填写的条件,以便排序到特定列表。 如果它是简单的字母顺序,只需在代码中表达它。你知道吗

示例:

class my_class():
    def __init__(self):
        self.list_A = []
        self.list_B = []
        self.dict = { "A":self.list_A, "B":self.list_B }

    def add_to_list(self, key):
        # Logic in here
        self.dict.get(key[:1]).append(key)

if __name__ == "__main__":
    c = my_class()
    c.add_to_list("Apple")
    c.add_to_list("Bus")
    c.add_to_list("Airplane")
    print(c.dict["A"])
    print(c.dict["B"])

你可以借助字典来做这件事。你知道吗

class base:
    def __init__(self, * pack):
        self.dictitems={}
        for i, j in zip('abcdefg',pack):
            self.dictitems[i]=j


    def add(self,list_name,item,key):

        self.dictitems[key].append(item)

    def printdict(self):
        print(self.dictitems)

a,b,c =[ [] for i in range(3)]
z=base(a,b,c)
z.add(b, 5 ,key ='b')
z.add(b, 7 ,key ='b')
z.add(c, 7 ,key ='c')
z.printdict()

相关问题 更多 >

    热门问题