【问题标题】:Join class list of lists加入类列表列表
【发布时间】:2021-06-17 23:20:26
【问题描述】:

我有这个方法:

    def add_duty(self, new_duty):
        self.duty.append(new_duty)

用于给员工附加一些职责:

manager_employee[2].add_duty(['Do sth', 'Shine'])
manager_employee[2].add_duty(['Swag'])
manager_employee[2].add_duty(['Lag'])

如果打印出来,它会以这种方式显示职责:

[['Do sth', 'Shine'], ['Swag'], ['Lag']]

我想将此列表合并为一个。我一直在尝试通过常规方式合并列表列表,但似乎类列表的行为方式不同(我是新手)。合并后会显示:

['D', 'o', ' ', 's', 't', 'h', 'S', 'h', 'i', 'n', 'e', 'S', 'w', 'a', 'g', 'Lag']

我正在寻找这种效果:

['Do sth', 'Shine', 'Swag', 'Lag']

我浏览了一些论坛,但没有找到答案。

【问题讨论】:

    标签: python list class methods


    【解决方案1】:
    l = [['Do sth', 'Shine'], ['Swag'], ['Lag']]
    
    list_ = []
    
    for i in l: list_ += i
    print(list_)
    

    【讨论】:

    • 不要使用list作为变量名,那是关键字dor列表构造函数
    • 感谢@azro,但在这个命名空间中我没有使用列表功能
    • 是的,但我们不要养成这个习惯
    【解决方案2】:

    修复:要合并[['Do sth', 'Shine'], ['Swag'], ['Lag']],您可以使用简单的列表理解

    a = [['Do sth', 'Shine'], ['Swag'], ['Lag']]
    a = [word for sublist in a for word in sublist]
    

    最好:修改您的 add_duty 以仅将单词添加到 self.duty 列表,而不是列表

    def add_duty(self, new_duty):
        if isinstance(new_duty, list):
            self.duty.extend(new_duty)
        else:
            self.duty.append(new_duty)
    
    # call like
    manager_employee[2].add_duty(['Do sth', 'Shine']) # with a list
    manager_employee[2].add_duty('Swag')              # with a string
    

    更好:使用*args 语法,它接受所有给定的参数并将它们存储在一个列表中

    def add_duty(self, *new_duty):  # new_duty contains all parameters, as a list
        self.duty.extend(new_duty)
    
    # call with any amount of string
    manager_employee[2].add_duty('Do sth', 'Shine', 'other')
    manager_employee[2].add_duty('Do sth', 'Shine')
    manager_employee[2].add_duty('Swag')             
    

    【讨论】:

      【解决方案3】:

      你也可以使用

      from functools import reduce
      l = [['Do sth', 'Shine'], ['Swag'], ['Lag']]
      functools.reduce(lambda x,y: x+y, l, [])
      

      如果你想要类似于函数式编程的东西

      【讨论】:

        猜你喜欢
        • 2015-06-05
        • 2017-02-07
        • 2015-10-07
        • 2013-12-31
        • 1970-01-01
        • 1970-01-01
        • 2013-01-26
        • 2018-03-15
        • 1970-01-01
        相关资源
        最近更新 更多