如何在列表推导中实现嵌套循环

时间:2015-05-30 04:18:55

标签: python list-comprehension

目前我有这个

def convert_tuple(self, listobj, fields=None):
    return [(obj.start, obj.end) for obj in listobj]

但我已经对这些字段进行了硬编码。

我希望将字段作为另一个列表,如

def convert_tuple(self, listobj, fields=['start', 'end', 'user']):
    return [(obj.field) for obj in listobj for field in fields]

我该如何实现

预期输出

[('2am', '5am', 'john'), ('3am', '5am', 'john1'), ('3am', '5am', 'john2') ]

其中2am开始,凌晨5点结束,john是用户名

1 个答案:

答案 0 :(得分:2)

您可以利用python builtin getattr以及嵌套列表理解来实现您的设想。

def convert_tuple(self, listobj, fields=['start', 'end', 'user']):
    return [(getattr(obj, field) for  field in fields)
            for obj in listobj] 

值得注意的是,你的理解是笛卡尔积而不是嵌套理解