条件列表理解与2个列表

时间:2018-01-12 08:01:21

标签: python-3.x list-comprehension

是否可以将此yield-function转换为(更简洁的)列表理解?

l1 = ['ID1', 'ID2', 'ID3', 'sum', 'sum', 'sum']
l2 = ['', '', '', 'Val1', 'Val2', 'Val3']

def getList(l1, l2):
    for i in range(len(l1)):
        yield l2[i] if l1[i] == 'sum' else l1[i]

print(list(getList(l1, l2)))

Thx&亲切的问候

3 个答案:

答案 0 :(得分:3)

是的,您可以将循环写为列表理解,如下所示:

def getList(l1, l2)
    return [b if b == 'sum' else a for a, b in zip(l1, l2)]

请注意,该函数不再是生成器,因为它不会生成单个值但返回list

答案 1 :(得分:2)

这可能是您正在寻找的内容:

list_comp = [i for i in (l1+l2) if i not in ['', 'sum']]

print(list_comp)
#['ID1', 'ID2', 'ID3', 'Val1', 'Val2', 'Val3']

答案 2 :(得分:0)

你也可以使用map()

def get_list(l1, l2):
    return list(map(lambda x, y: y if y == 'sum' else x, l1, l2))