加入类列表

2024-05-16 00:32:33 发布

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

我有这个方法:

    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']

我看过一些论坛,但没有找到答案


Tags: 方法selfadd列表new方式employeemanager
3条回答

你也可以使用

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

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

修复:要合并[['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')             
l = [['Do sth', 'Shine'], ['Swag'], ['Lag']]

list_ = []

for i in l: list_ += i
print(list_)

相关问题 更多 >