从列表中理解嵌套列表返回一个展平列表

时间:2017-03-07 09:47:33

标签: python list

我正在尝试创建一个包含属于linux组的所有用户的扁平列表 从grp.getgrall()返回的结构是:

[
  grp.struct_group(
                  gr_name='plugdev',
                  gr_passwd='x',
                  gr_gid=46,
                  gr_mem=[
                            'rolf',
                            'public'
                          ])
]

该组成员采用gr_mem=[]

中的列表形式

我可以使用以下内容:

import grp
plugdev_members = []
for group in grp.getgrall():
    if "plugdev" in group.gr_name:
        for user in group.gr_mem:
            plugdev_members.append(user)

返回一个单位列表:

['rolf','public']

使用列表理解:

plugdev_members = [
                    mem for mem in [
                                    m.gr_mem for m in grp.getgrall()
                                       if "plugdev" in m.gr_name
                                   ]
                  ] 
or

plugdev_members = [
                    m.gr_mem for m in grp.getgrall() 
                      if "plugdev" in m.gr_name
                   ]

我在列表中得到一个列表:

[['rolf', 'public']]

我确信必须有一种方法可以使用列表理解返回拼合列表,我只是没有看到它。我知道我需要在第一个循环中使用第二个循环,根据第一个示例,但我没有做到正确。
任何提示将不胜感激

1 个答案:

答案 0 :(得分:1)

你在第一个循环中缺少第二个循环:

plugdev_members = [m.gr_mem for m in grp.getgrall() if "plugdev" in m.gr_name]
#                  ^----- This is a list, so pugdev_members will be a list of lists

相反:

plugdev_members = [x for m in grp.getgrall() for x in m.gr_mem if "plugdev" in m.gr_name]
相关问题